
    9 jr                        S SK Jr  S SKJrJr  S SKrS SKrS SKJ	r	J
r
  S r " S S5      r " S S	5      r " S
 S5      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 S5      rS rS r \RB                  RE                  S/ S QS!14/ S"QS#14/ S$Q\#" 5       445      S% 5       r$S& r%\RB                  RE                  S/ S QS!14/ S"QS#S'1445      S( 5       r&g))    deque)combinationspermutationsN)edges_equalpairwisec                     [        U SS9  g)zConsume the iterator entirely.r   )maxlenNr   )iterators    s/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/networkx/algorithms/tests/test_dag.py_consumer      s     
(1    c                   N    \ 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)TestDagLongestPath   zBUnit tests computing the longest path in a directed acyclic graph.c                 f    [         R                  " 5       n[         R                  " U5      / :X  d   eg NnxDiGraphdag_longest_pathselfGs     r   
test_emptyTestDagLongestPath.test_empty   s&    JJL""1%+++r   c                 t    / SQn[         R                  " U5      n[         R                  " U5      / SQ:X  d   eg )N)      r       r       r"      r&      )r"      )r   r    r"   r&   r(   r   r   edgesr   s      r   test_unweighted1#TestDagLongestPath.test_unweighted1   s.    @JJu""1%888r   c                 t    / SQn[         R                  " U5      n[         R                  " U5      / SQ:X  d   eg )Nr   r!   r"   r$   r$   r&   r   r"   r   r&   r%   r   r    r"   r$   r&   r   r*   s      r   test_unweighted2#TestDagLongestPath.test_unweighted2   s.    HJJu""1%888r   c                     [         R                  " 5       n/ SQnUR                  U5        [         R                  " U5      / SQ:X  d   eg )N)r   r    )r    r"   r   )r"   r$   r   )r$   r&   r   )r"   r&   r$   )r   r(   r    )r    r"   r&   )r   r   add_weighted_edges_fromr   r   r   r+   s      r   test_weighted TestDagLongestPath.test_weighted"   s9    JJLS	!!%(""1%222r   c                     [         R                  " 5       n[        R                  " [         R                  [         R
                  U5        g r   )r   GraphpytestraisesNetworkXNotImplementedr   r   s     r   test_undirected_not_implemented2TestDagLongestPath.test_undirected_not_implemented(   s)    HHJb//1D1DaHr   c                 j   [        S5       Vs/ s H  n[        5       PM     nn[        R                  " 5       nUR	                  US   US   5        UR	                  US   US   5        UR	                  US   US   5        UR	                  US   US   5        [        R
                  " U5        gs  snf )zyTests that computing the longest path does not depend on
nodes being orderable.

For more information, see issue #1989.

r$   r   r   r    r"   N)rangeobjectr   r   add_edger   )r   nnodesr   s       r   test_unorderable_nodes)TestDagLongestPath.test_unorderable_nodes,   s     $)8,8a8,JJL	

58U1X&	

58U1X&	

58U1X&	

58U1X& 	A -s   B0c                 t    / SQn[         R                  " U5      n[         R                  " U5      / SQ:X  d   eg )Nr   r!   r!   r0   r1   r2   r3   r%   r4   )r   MultiDiGraphr   r*   s      r   test_multigraph_unweighted-TestDagLongestPath.test_multigraph_unweighted?   s.    POOE"""1%888r   c                     [         R                  " 5       n/ SQnUR                  U5        [         R                  " U5      SS/:X  d   eg )N)r   r    r    )r    r"   r    r   r"   r   r   r"   r&   r   r"   r    r   r"   r   rO   r:   r   r;   s      r   test_multigraph_weighted+TestDagLongestPath.test_multigraph_weightedD   sB    OO
 	
!!%(""1%!Q///r   c                     [         R                  " SS/5      nUR                  / SQ5        [         R                  " U5      SS/:X  d   e[         R                  " USS9/ SQ:X  d   eg )Nr   r!   )rT   rU   rV   r   r"   )default_weightr   r    r"   rW   r   s     r   'test_multigraph_weighted_default_weight:TestDagLongestPath.test_multigraph_weighted_default_weightP   s^    OOVV,-	!!"CD ""1%!Q///""1Q79DDDr    N)__name__
__module____qualname____firstlineno____doc__r   r,   r5   r<   rC   rK   rP   rX   r]   __static_attributes__r_   r   r   r   r      s4    L,9
9
3I&9

0Er   r   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
TestDagLongestPathLengthY   zTUnit tests for computing the length of a longest path in a
directed acyclic graph.

c                 `   / SQn[         R                  " U5      n[         R                  " U5      S:X  d   e/ SQn[         R                  " U5      n[         R                  " U5      S:X  d   e[         R                  " 5       nUR                  S5        [         R                  " U5      S:X  d   eg )Nr   r!   r#   r%   r'   )r&   r)   r$   r/   r   r   )r   r   dag_longest_path_lengthadd_noder*   s      r   test_unweighted(TestDagLongestPathLength.test_unweighted_   s    @JJu))!,111HJJu))!,111 JJL	

1))!,111r   c                     [         R                  " 5       n[        R                  " [         R                  [         R
                  U5        g r   )r   r?   r@   rA   rB   rk   r   s     r   rC   8TestDagLongestPathLength.test_undirected_not_implementedm   s)    HHJb//1K1KQOr   c                     / SQn[         R                  " 5       nUR                  U5        [         R                  " U5      S:X  d   eg )Nr8   r&   )r   r   r:   rk   r*   s      r   r<   &TestDagLongestPathLength.test_weightedq   s9    SJJL	!!%())!,111r   c                 p    / SQn[         R                  " U5      n[         R                  " U5      S:X  d   eg )NrN   r$   )r   rO   rk   r*   s      r   rP   3TestDagLongestPathLength.test_multigraph_unweightedw   s.    POOE"))!,111r   c                     [         R                  " 5       n/ SQnUR                  U5        [         R                  " U5      S:X  d   eg )NrS   r&   )r   rO   r:   rk   r;   s      r   rX   1TestDagLongestPathLength.test_multigraph_weighted|   s>    OO
 	
!!%())!,111r   r_   N)r`   ra   rb   rc   rd   rm   rC   r<   rP   rX   re   r_   r   r   rg   rg   Y   s!    
2P22

2r   rg   c                       \ rS rSr\S 5       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Srg)TestDAG   c                     g r   r_   )clss    r   setup_classTestDAG.setup_class   s    r   c                    [         R                  " / SQ5      n[         R                  [         R                  4 H  n[	        U" U5      5      S:X  a  M   e   UR                  SS5        [         R                  [         R                  4 H3  n[        R                  " [         R                  [        U" U5      5        M5     UR                  SS5        [         R                  [         R                  4 H  n[	        U" U5      5      S:X  a  M   e   UR                  SS5        [	        [         R                  " U5      5      S;   d   e[	        [         R                  " U5      5      S:X  d   eg )N)r   r2   r!   r\   r"   r    rV   >   r\   rV   )r   r   topological_sort lexicographical_topological_sorttuplerH   r@   rA   NetworkXUnfeasibler   remove_edge)r   DG	algorithms      r   test_topological_sort1TestDAG.test_topological_sort1   s   ZZ01--r/R/RSI2'9444 T 	Aq--r/R/RSIMM"//9R=I T 	q!--r/R/RSI2'9444 T 	q!R((,-1GGGGR88<=JJJr   c                    [         R                  R                  S5      n[         R                  " U5      (       a   e[         R                  " UR	                  5       5      (       a   e[         R                  " [         R
                  " SS/5      5      (       a   e[         R                  " [         R                  " SS/5      5      (       d   eg )Nr    r0   r1   )r   
generatorscomplete_graphis_directed_acyclic_graphto_directedr?   r   r   s     r   test_is_directed_acyclic_graph&TestDAG.test_is_directed_acyclic_graph   s    MM((+//2222//@@@@//&&9I0JKKKK++BJJ7G,HIIIIr   c                    [         R                  " S/S/S/S/S/S/S/S/S	/S
.	5      n[        R                  " [         R                  [
        [         R                  " U5      5        [         R                  " U5      (       a   eUR                  SS5        [        [         R                  " U5      5        [         R                  " U5      (       d   eg )Nr    r"   r$   r&   r               )	r   r    r"   r$   r&      r   r   r   )	r   r   r@   rA   r   r   r   r   r   r   r   s     r   test_topological_sort2TestDAG.test_topological_sort2   s    ZZ33333DDDD

 	b++Xr7J7J27NO//3333
q!$$R()++B////r   c                   ^ [         R                  " 5       mTR                  [        SS5       Vs/ s H  nSU4PM	     sn5        TR                  [        SS5       Vs/ s H  nSU4PM	     sn5        TR                  [        SS5       Vs/ s H  nSU4PM	     sn5        TR                  [        SS5       Vs/ s H  nSU4PM	     sn5        U4S	 jnU" [	        [         R
                  " T5      5      5        TR                  S
S5        [        R                  " [         R                  [        [         R
                  " T5      5        g s  snf s  snf s  snf s  snf )Nr    r&   r   	   r   r(   r   r$   c                    > [        U [        5      (       d   e[        U 5      [        T5      :X  d   e[        U S5       H#  u  p[        R
                  " TX!5      (       d  M#   e   g )Nr    )
isinstancelistsetr   r   has_path)orderuvr   s      r   validate0TestDAG.test_topological_sort3.<locals>.validate   sV    eT****u:R((($UA.;;r10000 /r   r   )r   r   add_edges_fromrF   r   r   rH   r@   rA   r   r   )r   ir   r   s      @r   test_topological_sort3TestDAG.test_topological_sort3   s   ZZ\
5A;7;aAq6;78
5A;7;aAq6;78
5B<8<aAq6<89
5R=9=aAq6=9:	1 	b))"-./
Bb++Xr7J7J27NO 8789s   EEE:Ec                     [         R                  " 5       nUR                  SS5        [        R                  " [         R
                  [        [         R                  " U5      5        g )Nr   r    )r   r?   rH   r@   rA   NetworkXErrorr   r   r   s     r   test_topological_sort4TestDAG.test_topological_sort4   s<    HHJ	

1ab&&"2E2Ea2HIr   c                     [         R                  " 5       nUR                  SS5        [        [         R                  " U5      5      SS/:X  d   eg )Nr   r   )r   r   rH   r   r   r   s     r   test_topological_sort5TestDAG.test_topological_sort5   s=    JJL	

1aB''*+1v555r   c                 .  ^ [         R                  [         R                  4 Hp  mU4S jnU4S jnU4S jn[        R                  " [
        U5        [        R                  " [
        U5        [        R                  " [         R                  U5        Mr     g )Nc                     > [         R                  " / SQ5      n SnT" U 5       H#  nU(       d  M  SnU R                  SU-
  S5        M%     g )Nr   r!   r0   TFr&   )r   r   rH   r   firstxr   s      r   runtime_error5TestDAG.test_topological_sort6.<locals>.runtime_error   sA    ZZ 89"2Au %AE1- 'r   c                     > [         R                  " / SQ5      n SnT" U 5       H  nU(       d  M  SnU R                  S5        M!     g )Nr   TFr$   r   r   remove_noder   s      r   unfeasible_error8TestDAG.test_topological_sort6.<locals>.unfeasible_error   ;    ZZ 89"2Au %q) 'r   c                     > [         R                  " / SQ5      n SnT" U 5       H  nU(       d  M  SnU R                  S5        M!     g )Nr   TFr    r   r   s      r   runtime_error26TestDAG.test_topological_sort6.<locals>.runtime_error2   r   r   )r   r   r   r@   rA   RuntimeErrorr   )r   r   r   r   r   s       @r   test_topological_sort6TestDAG.test_topological_sort6   sa    --r/R/RSI.** MM,6MM,7MM"//1AB9 Tr   c                     [         R                  " / SQ5      n[        [         R                  " U5      5      / SQ/:X  d   eg )N)r   r!   r0   r1   r4   r   r   r   all_topological_sortsr   s     r   test_all_topological_sorts_1$TestDAG.test_all_topological_sorts_1   s2    ZZ89B,,R01o5FFFFr   c                     [         R                  " / SQ5      n[        [         R                  " U5      5      / SQ/ SQ/ SQ/ SQ/ SQ/:X  d   eg )N)r2   r    r   r#   r$   r"   r1   )r    r   r$   r"   r&   )r    r   r$   r&   r"   )r    r$   r   r"   r&   )r    r$   r   r&   r"   )r    r$   r&   r   r"   )r   r   sortedr   r   s     r   test_all_topological_sorts_2$TestDAG.test_all_topological_sorts_2   sG    ZZ@Ab..r238
 
 	
 
r   c                     S nS nS n[         R                  " [        R                  U5        [         R                  " [        R                  U5        [         R                  " [        R                  U5        g )Nc                  r    [         R                  " / SQ5      n [        [         R                  " U 5      5        g )N)r   r!   r0   r$   r    r1   r   )r   s    r   
unfeasible8TestDAG.test_all_topological_sorts_3.<locals>.unfeasible  s$    DEB))"-.r   c                  r    [         R                  " SS/5      n [        [         R                  " U 5      5        g Nr   r!   )r   r?   r   r   r   s    r   not_implemented=TestDAG.test_all_topological_sorts_3.<locals>.not_implemented  s(    &&)*A))!,-r   c                  r    [         R                  " / SQ5      n [        [         R                  " U 5      5        g )N)r   r   r!   )r   
MultiGraphr   r   r   s    r   not_implemented_2?TestDAG.test_all_topological_sorts_3.<locals>.not_implemented_2  s$    67A))!,-r   )r@   rA   r   r   rB   )r   r   r   r   s       r   test_all_topological_sorts_3$TestDAG.test_all_topological_sorts_3
  sP    	/
	.
	. 	b++Z8b//Ab//1BCr   c                    [         R                  " 5       n[        S5       H  nUR                  U5        M     [	        [        [        [        UR                  5      5      5      [	        [         R                  " U5      5      :X  d   eg )Nr)   )
r   r   rF   rl   r   mapr   r   rJ   r   )r   r   r   s      r   test_all_topological_sorts_4$TestDAG.test_all_topological_sorts_4  sb    ZZ\qAKKN c$RXX 678F$$R(=
 
 	
 
r   c                     [         R                  " / SQ5      n[        [         R                  " U5      5      [        / SQ/ SQ/5      :X  d   eg )N)r   r   r!   r0   r%   r%   r%   r4   )r   r    r"   r&   r$   )r   rO   r   r   r   s     r   'test_all_topological_sorts_multigraph_1/TestDAG.test_all_topological_sorts_multigraph_1%  sB    __UVb..r23vo.8
 
 	
 
r   c                    Sn/ n[        SU5       H  nUR                  X3S-   4/U-  5        M     [        R                  " U5      n[	        [        R
                  " U5      5      [	        [        SUS-   5      5      /:X  d   eg )Nr   r   )rF   extendr   rO   r   r   )r   Nr+   r   r   s        r   'test_all_topological_sorts_multigraph_2/TestDAG.test_all_topological_sorts_multigraph_2+  ss    q!ALL1!e*)* __U#B,,R01d5AE?6K5LLLLr   c                 Z   [         R                  " 5       n[         R                  R                  R                  nUR                  / SQ5        U" US5      1 Sk:X  d   eU" US5      SS1:X  d   eU" US5      [        5       :X  d   e[        R                  " [         R                  X!S5        g )Nr   r2   r   r   r1   r    r(   r'   r(   >   r   r    r$   r&   r"   r   r$      )
r   r   
algorithmsdag	ancestorsr   r   r@   rA   r   )r   r   r   s      r   test_ancestorsTestDAG.test_ancestors3  s    JJLMM%%//		QRA,...A1a&(((A#%'''b&&	a8r   c                 Z   [         R                  " 5       n[         R                  R                  R                  nUR                  / SQ5        U" US5      1 Sk:X  d   eU" US5      1 Sk:X  d   eU" US5      [        5       :X  d   e[        R                  " [         R                  X!S5        g )Nr   r   >   r    r"   r(   r$   >   r    r"   r&   r(   r"   r   )
r   r   r   r   descendantsr   r   r@   rA   r   )r   r   r   s      r   test_descendantsTestDAG.test_descendants<  s    JJLmm''33	QR1a I---1a L0001a CE)))b&&:r   c                    [         R                  " / SQ5      n/ SQn[        [         R                  " U5      R	                  5       USS9(       d   e[         R                  " / SQ5      n/ SQn[        [         R                  " U5      R	                  5       USS9(       d   e[         R                  " / SQ5      n/ SQn[        X! Vs/ s H  o3U4PM     sn-   5      n[        [        [         R                  " U5      R	                  5       5      USS9(       d   e[         R                  " / SQ5      n/ SQn[        [        [         R                  " U5      R	                  5       5      U5      (       d   e[         R                  " / SQ5      n/ SQn[        [        [         R                  " U5      R	                  5       5      U5      (       d   e[         R                  " / SQ5      n/ SQn[        [        [         R                  " U5      R	                  5       5      USS9(       d   e[         R                  " S	S
SS04S
SSS04S/5      n[         R                  " U5      nUR	                  5        H+  u  pgUR                  Xg5      UR                  Xg5      :X  a  M+   e   Sn[         R                  " S [        U5       5       5      n[         R                  " U5      nUR	                  5        H+  u  pgUR                  Xg5      UR                  Xg5      :X  a  M+   e   [         R                  " 5       n[        R                  " [         R                  5         [         R                  " USS9  S S S 5        g s  snf ! , (       d  f       g = f)Nr   r   r2   r   r$   r!   r#   r0   Tdirectedr   r!   r#   r   r2   r   r!   r#   r   r!   r"   r   r   r   r!   r"   r    r2   r   r   r    ar"   br   r0   
   c              3   6   #    U  H  oUS -   SUS.4v   M     g7f)r   r  )fweightNr_   .0r   s     r   	<genexpr>2TestDAG.test_transitive_closure.<locals>.<genexpr>h  s     MHq1q5q"9:H   zwrong input)	reflexive)r   r   r   transitive_closurer+   r   r?   r   rO   get_edge_datarF   r@   rA   r   )	r   r   solutionrI   solnHr   r   ks	            r   test_transitive_closureTestDAG.test_transitive_closureE  s   JJ/0C200399;XPTUUUJJ/0;200399;XPTUUUJJ/0Ch!!4!Qa&!!4452((+1134dT
 	
 
 HH-.C6""7"7":"@"@"BCXNNNNMM23C6""7"7":"@"@"BCXNNNNOO45C2((+1134h
 	
 

 JJAQx(1a#q*:FCD!!!$GGIDA??1(AOOA,AAAA  JJME!HMM!!!$GGIDA??1(AOOA,AAAA  HHJ]]2++,!!!}= -,A "5@ -,s   M3
M88
Nc                 R   [         R                  " / SQ5      n/ SQn[        X! Vs/ s H  o3U4PM     sn-   5      n[        [         R                  " U5      R                  5       USS9(       d   e[        [         R                  " US5      R                  5       USS9(       d   e[        [         R                  " US5      R                  5       USS9(       d   e[        [         R                  " US 5      R                  5       USS9(       d   e[         R                  " / SQ5      n/ SQn[        X! Vs/ s H  o3U4PM     sn-   5      n[        [         R                  " U5      R                  5       USS9(       d   e[        [         R                  " US5      R                  5       USS9(       d   e[        [         R                  " US5      R                  5       USS9(       d   e[        [         R                  " US 5      R                  5       USS9(       d   e[         R                  " / SQ5      n[        / S	Q5      n[        X! Vs/ s H  o3U4PM     sn-   5      n[        [        [         R                  " U5      R                  5       5      USS9(       d   e[        [        [         R                  " US5      R                  5       5      USS9(       d   e[        [        [         R                  " US 5      R                  5       5      USS9(       d   e[        [        [         R                  " US5      R                  5       5      USS9(       d   e[         R                  " / SQ5      n/ SQn[        X! Vs/ s H  o3U4PM     sn-   5      n[        [         R                  " U5      R                  5       U5      (       d   e[        [         R                  " US5      R                  5       U5      (       d   e[        [         R                  " US5      R                  5       U5      (       d   e[        [         R                  " US 5      R                  5       U5      (       d   e[         R                  " / SQ5      n/ SQn[        X! Vs/ s H  o3U4PM     sn-   5      n[        [         R                  " U5      R                  5       U5      (       d   e[        [         R                  " US5      R                  5       U5      (       d   e[        [         R                  " US5      R                  5       U5      (       d   e[        [         R                  " US 5      R                  5       U5      (       d   e[         R                  " / SQ5      n/ SQn[        X! Vs/ s H  o3U4PM     sn-   5      n[        [         R                  " U5      R                  5       USS9(       d   e[        [         R                  " US5      R                  5       USS9(       d   e[        [         R                  " US5      R                  5       USS9(       d   e[        [         R                  " US 5      R                  5       USS9(       d   eg s  snf s  snf s  snf s  snf s  snf s  snf )
Nr   r   Tr   Fr   r   r   r   )	r   r   r   r   r  r+   r?   r   rO   )r   r   r  rI   r  s        r   !test_reflexive_transitive_closure)TestDAG.test_reflexive_transitive_closureq  s   JJ/0Ch!!4!Qa&!!445200399;XPTUUU!!!U+113X
 	
 
 200D9??A4RVWWW!!!T*002Ht
 	
 
 JJ/0;h!!4!Qa&!!445200399;XPTUUU!!!U+113X
 	
 
 200D9??A4RVWWW!!!T*002Ht
 	
 
 JJ/0JKh!!4!Qa&!!4452((+1134dT
 	
 
 2((E288:;TD
 	
 
 2((D1779:Ht
 	
 
 2((D1779:D4
 	
 
 HH-.Ch!!4!Qa&!!445200399;XFFFF200E:@@BHMMMM200D9??A4HHHH200D9??A8LLLLMM23Ch!!4!Qa&!!445200399;XFFFF200E:@@BHMMMM200D9??A4HHHH200D9??A8LLLLOO45Ch!!4!Qa&!!445200399;XPTUUU!!!U+113X
 	
 
 200D9??A4RVWWW!!!T*002Ht
 	
 
} "5 "5 "5  "5 "5 "5s#   Z
4Z
Z
=Z
Z
!Z$
c                    [         R                  " / SQ5      n[         R                  R                  R                  n/ SQn[        U" U5      R                  5       USS9(       d   e[         R                  " / SQ5      n/ SQn[        U" U5      R                  5       USS9(       d   e[         R                  " / SQ5      n[        R                  " [         R                  X!5        [         R                  " SSS	S
04SS
SS04S/5      nU" U5      nUR                  5        H+  u  pVUR                  XV5      UR                  XV5      :X  a  M+   e   Sn[         R                  " S [        U5       5       5      nU" U5      nUR                  5        H+  u  pVUR                  XV5      UR                  XV5      :X  a  M+   e   g )Nr   r   Tr   r   r   r   r    r  r"   r  r   r0   r  c              3   6   #    U  H  oUS -   SUS.4v   M     g7f)r   bar)foor  Nr_   r  s     r   r
  6TestDAG.test_transitive_closure_dag.<locals>.<genexpr>  s     Q11q5%1"=>r  )r   r   r   r   transitive_closure_dagr   r+   r?   r@   rA   rB   r  rF   )r   r   r  r  r  r   r   r  s           r   test_transitive_closure_dag#TestDAG.test_transitive_closure_dag  sj   JJ/0]]..EEC-a0668(TRRRJJ/0;-a0668(TRRRHH-.b//1CG JJAQx(1a#q*:FCDq!GGIDA??1(AOOA,AAAA  JJQaQQq!GGIDA??1(AOOA,AAAA r   c                    [         R                  " / SQ5      n[         R                  R                  R                  n/ SQn[        U" U5      R                  5       USS9(       d   e[         R                  " / SQ5      n[         R                  R                  R                  n/ SQn[        U" U5      R                  5       USS9(       d   e[         R                  " / SQ5      n[        R                  " [         R                  X!5        g )Nr   r   Tr   r   r   )r   r   r   r   transitive_reductionr   r+   r?   r@   rA   rB   )r   r   r"  r  s       r   test_transitive_reduction!TestDAG.test_transitive_reduction  s    JJGH!}}00EE+/288:HtTTTJJ?@!}}00EE+/288:HtTTTHH-.b//1EIr   c                     U Vs/ s H  n[        U5      PM     nnU Vs/ s H  n[        U5      PM     nn[        U5      [        U5      :X  d   eg s  snf s  snf r   )	frozensetr   )r   r  resultr  solress         r   _check_antichainsTestDAG._check_antichains  sP    %-.Xy|X.%+,Vy|V,3x3s8### /,s
   AAc                    ^ [         R                  R                  R                  m[         R                  " / SQ5      n/ S/S/S/S//nU R                  [        T" U5      5      U5        [         R                  " / SQ5      n/ S/S/SS/S/SS/SS// S	QS
/S
S/S/SS/S/S//nU R                  [        T" U5      5      U5        [         R                  " / SQ5      n/ S/S
/S/SS/SS
/S/S/SS/SS
/SS// SQ/ SQSS/S//nU R                  [        T" U5      5      U5        [         R                  " SS/S/S/S/S.5      n/ S/S/S/S/SS/SS/S//nU R                  [        T" U5      5      U5        [         R                  " 5       nU R                  [        T" U5      5      / /5        [         R                  " 5       nUR                  / SQ5        / S/S/SS/S/SS/SS// SQ/nU R                  [        T" U5      5      U5        U4S jn[         R                  " / SQ5      n[        R                  " [         R                  X15        [         R                  " / SQ5      n[        R                  " [         R                  X15        g )Nr   r$   r"   r    r   rj   r)   r(   )r(   r)   r$   r&   )r   r2   r0   r%   r'   )r    r$   r(   )r    r$   r&   )r   r   r    r"   r   r   r   r    )r    r   r   c                 &   > [        T" U 5      5      $ r   )r   )r   
antichainss    r   r  "TestDAG.test_antichains.<locals>.f  s    
1&&r   r   )r   r   r   r/  r   r*  r   add_nodes_fromr?   r@   rA   rB   r   )r   r   r  r  r/  s       @r   test_antichainsTestDAG.test_antichains  s   ]]&&11
JJ/0aS1#s+tJqM2H=JJGHCCFCFFCFCFCC
  	tJqM2H=JJ?@CCCFFCCFFFFC
" 	tJqM2H=JJAq6qcqcqc:;aS1#sQFQFQC@tJqM2H=JJLtJqM2RD9JJL	#aS1a&1#1v1vyItJqM2H=	' HH-.b//6JJ/0b++Q2r   c                    [         R                  " / SQ5      n[        [         R                  " U5      5      / SQ:X  d   e[        [         R                  " US S95      / SQ:X  d   e[        [         R                  " US S95      / SQ:X  d   eg )N)r   r!   r   r3   r   )r   r    r"   r$   r&   r(   c                     U $ r   r_   r   s    r   <lambda>?TestDAG.test_lexicographical_topological_sort.<locals>.<lambda>  s    r   keyc                     U * $ r   r_   r6  s    r   r7  r8  %  s    !r   )r   r&   r$   r    r(   r"   )r   r   r   r   r   s     r   %test_lexicographical_topological_sort-TestDAG.test_lexicographical_topological_sort  s    JJ?@B77:;?QQQQB77{KL Q
 
 	
 
 B77|LM R
 
 	
 
r   c                   ^  " S S5      nS n[        S5       Vs/ s H
  o1" U5      PM     snm[        R                  " 5       n/ SQnUR                  U4S jU 5       5        [	        [        R
                  " XBS95      nUT:X  d   egs  snf )	z
Check the case of two or more nodes with same key value.
Want to avoid exception raised due to comparing nodes directly.
See Issue #3493
c                        \ rS rSrS rS rSrg)ATestDAG.test_lexicographical_topological_sort2.<locals>.Test_Nodei5  c                     Xl         SU l        g )Nr   labelpriority)r   rI   s     r   __init__JTestDAG.test_lexicographical_topological_sort2.<locals>.Test_Node.__init__6  s    
 !r   c                 "    SU R                    S3$ )NzNode())rC  r   s    r   __repr__JTestDAG.test_lexicographical_topological_sort2.<locals>.Test_Node.__repr__:  s    tzzl!,,r   rB  N)r`   ra   rb   rc   rE  rJ  re   r_   r   r   	Test_Noder@  5  s    "-r   rL  c                     U R                   $ r   )rD  )nodes    r   sorting_keyCTestDAG.test_lexicographical_topological_sort2.<locals>.sorting_key=  s    == r   r$   )r   r   r   r    )r   r"   r!   c              3   <   >#    U  H  u  pTU   TU   4v   M     g 7fr   r_   )r	  r  r  
test_nodess      r   r
  ATestDAG.test_lexicographical_topological_sort2.<locals>.<genexpr>C  s      JEDA*Q-A7Es   r9  N)rF   r   r   r   r   r   )r   rL  rO  rI   r   r+   sortingrT  s          @r   &test_lexicographical_topological_sort2.TestDAG.test_lexicographical_topological_sort2.  s|    	- 	-	! -2!H5HqilH5
JJL0	JEJJr::1NO*$$$ 6s   B
r_   N)r`   ra   rb   rc   classmethodr|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r#  r*  r2  r<  rW  re   r_   r   r   rx   rx      s     K*J0,P$J6
C>G
D&

M9;*>XC
JB.
J$
:3x
(%r   rx   c            
         [         R                  " SS/SS/S// SS// / S.5      R                  5       n [         R                  " U 5       Vs/ s H  n[	        U5      PM     nn/ SQSS/S/S	//nX#:X  d   e[         R
                  " U R                  5      nUR                  SS	5        [         R                  " U5       Vs/ s H  n[	        U5      PM     nnX#:X  d   eg s  snf s  snf )
Nr    r"   r$   r&   r)   r(   )r   r    r"   r$   r&   r(   r)   )r$   r(   r)   r   )r   r   reversetopological_generationsr   rO   r+   rH   )r   gengenerationsexpectedMGs        r   test_topological_generationsra  I  s    


F1v1#"!QB2F	gi  +-*D*DQ*GH*G36#;*GKHAq6A3,H"""		!BKK1*,*D*DR*HI*H36#;*HKI""" I Js   C C$c                  x    [         R                  " 5       n [        [         R                  " U 5      5      / :X  d   eg r   )r   r   r   r\  r   s    r   "test_topological_generations_emptyrc  X  s+    


A**1-."444r   c                      [         R                  " SS/SS/SS//5      n [        R                  " [         R                  5         [        [         R                  " U 5      5        S S S 5        g ! , (       d  f       g = f)Nr    r   r"   )r   r   r@   rA   r   r   r\  r   s    r   "test_topological_generations_cyclere  ]  sT    


QFQFQF+,A	r,,	-R''*+ 
.	-	-s    A--
A;c                      [         R                  " 5       n [         R                  " U / SQ5        [         R                  " U 5      (       a   eg )Nr   r    r"   r$   r   r   	add_cycleis_aperiodicr   s    r   test_is_aperiodic_cyclerk  c  s3    


ALLL!q!!!!!r   c                      [         R                  " 5       n [         R                  " U / SQ5        [         R                  " U / SQ5        [         R                  " U 5      (       d   eg )Nrg  )r"   r$   r&   r(   r)   rh  r   s    r   test_is_aperiodic_cycle2rm  i  s>    


ALLL!LLO$??1r   c                      [         R                  " 5       n [         R                  " U / SQ5        [         R                  " U / SQ5        [         R                  " U 5      (       a   eg )Nrg  )r"   r$   r&   r(   rh  r   s    r   test_is_aperiodic_cycle3ro  p  sA    


ALLL!LLL!q!!!!!r   c                      [         R                  " 5       n [         R                  " U / SQ5        U R                  SS5        [         R                  " U 5      (       d   eg )Nrg  r   r"   r   r   ri  rH   rj  r   s    r   test_is_aperiodic_cycle4rr  w  >    


ALLL!JJq!??1r   c                      [         R                  " 5       n [         R                  " U / SQ5        U R                  SS5        [         R                  " U 5      (       d   eg )Nrg  r   rq  r   s    r   test_is_aperiodic_selfloopru  ~  rs  r   c                      [         R                  " 5       n [        R                  " [         R                  [         R
                  U 5        g r   )r   r   r@   rA   NetworkXPointlessConceptrj  r   s    r   #test_is_aperiodic_null_graph_raisesrx    s'    


A
MM"--rBr   c                      [         R                  " / SQ5      n [        R                  " [         R                  [         R
                  U 5        g )Nr   )r   r?   r@   rA   r   rj  r   s    r   #test_is_aperiodic_undirected_raisesrz    s+    
)*A
MM"""BOOQ7r   c                      [         R                  " 5       n [         R                  " U / SQ5        U R                  SS5        [        R
                  " [         R                  [         R                  U 5        g )Nr-  r"   )r   r   ri  rH   r@   rA   r   rj  r   s    r   %test_is_aperiodic_disconnected_raisesr|    sC    


ALLIJJq!
MM"""BOOQ7r   c                      [         R                  " SS/5      n [        R                  " [         R                  [         R
                  U 5        g r   )r   r   r@   rA   r   rj  r   s    r   )test_is_aperiodic_weakly_connected_raisesr~    s/    


FF#$A
MM"""BOOQ7r   c                      [         R                  " [         R                  S9n [        R                  " [         R
                  SS9   [         R                  " U 5        S S S 5        g ! , (       d  f       g = f)Ncreate_usingzGraph has no nodes.match)r   empty_graphr   r@   rA   rw  rj  r   s    r   test_is_aperiodic_empty_graphr    sB    
BJJ/A	r22:O	P
 
Q	P	Ps   A&&
A4c                      [         R                  " [         R                  " 5       5      n [         R                  " U 5      (       a   eg r   )r   r   davis_southern_women_graphrj  r   s    r   test_is_aperiodic_bipartiter    s1    


20023Aq!!!!!r   c                      [         R                  " 5       n U R                  S5        [         R                  " U 5      (       a   eU R	                  SS5        [         R                  " U 5      (       d   eg )Nr   )r   r   rl   rj  rH   r   s    r   test_is_aperiodic_single_noder    sP    


AJJqMq!!!!JJq!??1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)TestDagToBranchingi  z>Unit tests for the :func:`networkx.dag_to_branching` function.c                    [         R                  " / SQ5      n[         R                  " U5      n[         R                  " / SQ5      n[         R                  " U5      (       d   e[         R                  " X#5      (       d   eg)z^Tests that a directed acyclic graph with a single degree
zero node produces an arborescence.

)rQ  rR  r2   r!   )rQ  r2   rR  r#   N)r   r   dag_to_branchingis_arborescenceis_isomorphicr   r   Br_  s       r   test_single_root#TestDagToBranching.test_single_root  s`    
 JJ78"::>?!!!$$$$,,,,r   c                 >   [         R                  " / SQ5      n[         R                  " U5      n[         R                  " / SQ5      n[         R                  " U5      (       d   e[         R                  " U5      (       a   e[         R
                  " X#5      (       d   eg)zTests that a directed acyclic graph with multiple degree zero
nodes creates an arborescence with multiple (weakly) connected
components.

)rQ  rR  r2   r!   )r&   r    )rQ  r2   rR  r#   r'   )r(   r)   N)r   r   r  is_branchingr  r  r  s       r   test_multiple_roots&TestDagToBranching.test_multiple_roots  su     JJ?@"::NOq!!!!%%a((((,,,,r   c                     [         R                  " SS[         R                  " 5       S9n[         R                  " U5      n[         R                  " X5      (       d   eg)ztTests that a directed acyclic graph that is already an
arborescence produces an isomorphic arborescence as output.

r    r  N)r   balanced_treer   r  r  )r   Ar  s      r   test_already_arborescence,TestDagToBranching.test_already_arborescence  sE    
 Q

="%%%%r   c                 :   [         R                  " SS[         R                  " 5       S9n[         R                  " SS[         R                  " 5       S9n[         R                  " X5      n[         R                  " U5      n[         R
                  " X45      (       d   eg)zmTests that a directed acyclic graph that is already a
branching produces an isomorphic branching as output.

r    r  N)r   r  r   disjoint_unionr  r  )r   T1T2r   r  s        r   test_already_branching)TestDagToBranching.test_already_branching  so    
 a>a>b%"%%%%r   c                     [         R                  " [        R                  5         [        R                  " [        SSS95      n[        R                  " U5        SSS5        g! , (       d  f       g= f)z3Tests that a non-acyclic graph causes an exception.abcT)cyclicN)r@   rA   r   	HasACycler   r   r  r   s     r   test_not_acyclic#TestDagToBranching.test_not_acyclic  sA    ]]2<<(

8E$78A" )((s   5A##
A1c                     [         R                  " [        R                  5         [        R                  " [        R
                  " 5       5        S S S 5        g ! , (       d  f       g = fr   )r@   rA   r   rB   r  r?   rI  s    r   test_undirected"TestDagToBranching.test_undirected  s4    ]]2445
+ 655   *A
A&c                     [         R                  " [        R                  5         [        R                  " [        R
                  " 5       5        S S S 5        g ! , (       d  f       g = fr   )r@   rA   r   rB   r  r   rI  s    r   test_multigraph"TestDagToBranching.test_multigraph  s4    ]]24450 655r  c                     [         R                  " [        R                  5         [        R                  " [        R
                  " 5       5        S S S 5        g ! , (       d  f       g = fr   )r@   rA   r   rB   r  rO   rI  s    r   test_multidigraph$TestDagToBranching.test_multidigraph  s5    ]]2445 12 655r  r_   N)r`   ra   rb   rc   rd   r  r  r  r  r  r  r  r  re   r_   r   r   r  r    s.    H	--P&	&#,13r   r  c                      [         R                  " S5      n [         R                  " U S5      [         R                  " U S5      s=:H  =(       a    1 Sk:H    gs    g)zZRegression test to ensure ancestors and descendants work as expected on
undirected graphs.r&   r    >   r   r   r"   r$   N)r   
path_graphr   r   r   s    r   %test_ancestors_descendants_undirectedr    s8     	aALLA"..A.>>,>r   c                      [         R                  " 5       n [        R                  " [         R                  SS9   [         R
                  R                  U 5        S S S 5        g ! , (       d  f       g = fNzfor undirected typer  )r   r?   r@   rA   rB   r   v_structuresr   s    r   test_v_structures_raiser    sA    

A	r008M	N
A 
O	N	N    A""
A0)edgelistr_  )rQ  rR  r  )r   r    r"   ))r  r  )Cr  )Dr   )r  E)r   r  )r  r  r  )rQ  r   rR  c                     [         R                  " U 5      n[        [         R                  R	                  U5      5      nX1:X  d   eg r   )r   r   r   r   r  )r  r_  r   	v_structss       r   test_v_structuresr    s7     	

8ABFF''*+I   r   c                      [         R                  " 5       n [        R                  " [         R                  SS9   [         R
                  R                  U 5        S S S 5        g ! , (       d  f       g = fr  )r   r?   r@   rA   rB   r   	collidersr   s    r   test_colliders_raiser  -  sA    

A	r008M	N
 
O	N	Nr  )r  r  r   c                     [         R                  " U 5      n[        [         R                  R	                  U5      5      nX1:X  d   eg r   )r   r   r   r   r  )r  r_  r   r  s       r   test_collidersr  3  s7     	

8ABFF$$Q'(I   r   )'collectionsr   	itertoolsr   r   r@   networkxr   networkx.utilsr   r   r   r   rg   rx   ra  rc  re  rk  rm  ro  rr  ru  rx  rz  r|  r~  r  r  r  r  r  r  markparametrizer   r  r  r  r_   r   r   <module>r     sL    0   0EE EEP-2 -2`}% }%@#5
,""C
8
88
"Z3 Z3z?  %K	

 I	
 
"35)
!!  %K	

 Io.	
	!!r   