
    9 jS&                     <    S SK r S SKr " S S5      r " S S5      rg)    Nc                      \ rS rSr\R
                  R                  S\R                  " 5       \R                  " 5       /5      S 5       r
S rS r\R
                  R                  S\R                  \R                  /5      \R
                  R                  S/ SQ5      S	 5       5       rS
 r\R
                  R                  SS// SQS4/ SQS4/5      S 5       rS rS rSrg)TestImmediateDominators   Gc                     [         R                  " [        R                  SS9   [        R                  " US5        SSS5        g! , (       d  f       g= f)z?Check that `immediate_dominators` raises for undirected graphs.not implemented for undirectedmatchr   N)pytestraisesnxNetworkXNotImplementedimmediate_dominatorsselfr   s     y/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/networkx/algorithms/tests/test_dominance.pytest_raises_undirected.TestImmediateDominators.test_raises_undirected   s>     ]]%%-N
 ##Aq)
 
 
   A
Ac                     [         R                  " S[         R                  S9n[        R                  " [         R
                  SS9   [         R                  " US5        SSS5        g! , (       d  f       g= f)zJCheck that `immediate_dominators` raises when `start` is not in the graph.   create_usingnot in Gr	   N)r   empty_graphDiGraphr   r   NetworkXErrorr   r   s     r   test_raises_node(TestImmediateDominators.test_raises_node   sG    NN12::6]]2++;?##Aq) @??   A((
A6c                     [         R                  " 5       nUR                  S5        [         R                  " US5      0 :X  d   eUR	                  SS5        [         R                  " US5      0 :X  d   eg Nr   )r   r   add_noder   add_edger   s     r   test_singleton&TestImmediateDominators.test_singleton   s\    JJL	

1&&q!,222	

1a&&q!,222    genn   
      c                     U" U[         R                  " 5       S9n[         R                  " US5      nU[        SU5       Vs0 s H  oUUS-
  _M
     sn:X  d   egs  snf )zBCheck `immediate_dominators` is correct for path and cycle graphs.r   r   r   N)r   r   r   range)r   r(   r)   r   idomis         r   test_path_and_cycle+TestImmediateDominators.test_path_and_cycle   sT     

-&&q!,%1+6+Q1q5+66666s   Ac                     Sn[         R                  " U[         R                  " 5       S9n[         R                  " US5      nU[	        SU5       Vs0 s H  oDUS-
  _M
     sn:X  d   eg s  snf )Nr+   r   r      )r   
path_graphr   r   r/   )r   r)   r   r0   r1   s        r   test_unreachable(TestImmediateDominators.test_unreachable$   s[    MM!"**,7&&q!,%1+6+Q1q5+66666s   A)edgeliststartr   r5   r5   r      r5   )   r   )r+   r?   )r+   r@   r+   	r<   r=   r5   r?   r>   )r@   r5   )r@   r?   )r+   r   r   r@   )r   r+   c                     [         R                  " U5      n[         R                  " X25      nU[        R	                  [        SU5      U5      :X  d   eg)z
Check `immediate_dominators` on irreducible reference graphs.

Graphs taken from figures 2 and 4 of "A simple, fast dominance algorithm." (2006).
https://hdl.handle.net/1911/96345
r   N)r   r   r   dictfromkeysr/   )r   r9   r:   r   r0   s        r   test_irreducible(TestImmediateDominators.test_irreducible*   sA    6 JJx &&q0t}}U1e_e<<<<r'   c                     / SQn[         R                  " U5      n[         R                  " US5      nUSSSSSS.:X  d   e[         R                  " UR                  SS9S5      nUSSSSSS	.:X  d   eg )
Nr<   rB   )r5   r@   )r5   r   )r?   r+   r@   r+   )r+   r5   r   r5   )r5   r?   r@   r+   r   Fcopyr   r+   r   r5   r?   r@   r+   r   r   r   reverser   edgesr   results       r   test_domrel_png'TestImmediateDominators.test_domrel_pngI   sv    HJJu((A.Q1qQ7777(()>BQ1qQ7777r'   c           	          / SQn[         R                  " U5      n[         R                  " US5      nUSSSSSSSS.:X  d   e[         R                  " UR                  SS9S	5      nUSS	S	SS
S	SS.:X  d   eg )N	)r   r   r<   )r   r?   )r5      )r?   r@   rK   )r@   r   )r+   rX   rC   r   r   r?   r@   )r   r5   r?   r@   r+   r   rX   FrL   rX   r+   )r   r   r5   r?   r@   r+   r   rO   rQ   s       r   test_boost_example*TestImmediateDominators.test_boost_exampleS   s     YJJu((A.Q1qQ1CCCC(()>BQ1qQ1CCCCr'    N)__name__
__module____qualname____firstlineno__r   markparametrizer   Graph
MultiGraphr   r   r%   r6   cycle_graphr2   r7   rG   rT   rY   __static_attributes__r[   r'   r   r   r      s    [[S288:r}}"?@* A**3 [[UR]]BNN$CD[[S+.7 / E77 [[	W=qA
 	
(	=)(	=8	Dr'   r   c                      \ rS rSr\R
                  R                  S\R                  " 5       \R                  " 5       /5      S 5       r
S rS r\R
                  R                  S\R                  \" 5       4\R                  S14/5      \R
                  R                  S/ S	Q5      S
 5       5       rS rS rS rS rS rS rS rS rS rSrg)TestDominanceFrontiers_   r   c                     [         R                  " [        R                  SS9   [        R                  " US5        SSS5        g! , (       d  f       g= f)z>Check that `dominance_frontiers` raises for undirected graphs.r   r	   r   N)r   r   r   r   dominance_frontiersr   s     r   r   -TestDominanceFrontiers.test_raises_undirected`   s>     ]]%%-N
 ""1a(
 
 
r   c                     [         R                  " S[         R                  S9n[        R                  " [         R
                  SS9   [         R                  " US5        SSS5        g! , (       d  f       g= f)zICheck that `dominance_frontiers` raises when `start` is not in the graph.r   r   r   r	   N)r   r   r   r   r   r   rj   r   s     r   r   'TestDominanceFrontiers.test_raises_nodeh   sG    NN12::6]]2++;?""1a( @??r    c                    [         R                  " 5       nUR                  S5        [         R                  " US5      S[	        5       0:X  d   eUR                  SS5        [         R                  " US5      SS10:X  d   eg r"   )r   r   r#   rj   setr$   r   s     r   r%   %TestDominanceFrontiers.test_singletonn   sh    JJL	

1%%a+35z999	

1a%%a+A3x777r'   zgen, dfr   r)   r*   c                     U" U[         R                  " 5       S9n[         R                  " US5      [        R	                  [        U5      U5      :X  d   eg)zFCheck that `dominance_frontiers` is correct for path and cycle graphs.r   r   N)r   r   rj   rE   rF   r/   )r   r(   dfr)   r   s        r   r2   *TestDominanceFrontiers.test_path_and_cycleu   s@     

-%%a+t}}U1Xr/JJJJr'   c                     Sn[         R                  " U[         R                  " 5       S9n[         R                  " US5      [        R                  [        SU5      [        5       5      :X  d   eg )Nr+   r   r   )r   r6   r   rj   rE   rF   r/   ro   )r   r)   r   s      r   r7   'TestDominanceFrontiers.test_unreachable|   sK    MM!"**,7%%a+t}}U1a[#%/PPPPr'   c                     / SQn[         R                  " U5      n[         R                  " US5      S1S1S1S1[        5       S.:X  d   eg)zn
Graph taken from figure 2 of "A simple, fast dominance algorithm." (2006).
https://hdl.handle.net/1911/96345
r;   r+   r5   r   rN   Nr   r   rj   ro   r   rR   r   s      r   test_irreducible1(TestDominanceFrontiers.test_irreducible1   sU    
 AJJu%%a+ssssu0
 
 	
 
r'   c                     / SQn[         R                  " U5      n[         R                  " US5      S1SS1S1SS1S1[        5       S.:X  d   eg)zn
Graph taken from figure 4 of "A simple, fast dominance algorithm." (2006).
https://hdl.handle.net/1911/96345
rA   r   r5   r   r?   r   r5   r?   r@   r+   r   Nrw   rx   s      r   test_irreducible2(TestDominanceFrontiers.test_irreducible2   s^    
 YJJu%%a+s1vs1vsu0
 
 	
 
r'   c                 6   / SQn[         R                  " U5      n[         R                  " US5      [        5       S1S1S1S1[        5       S.:X  d   e[         R                  " UR	                  SS9S5      nU[        5       S1S1S1S1[        5       S.:X  d   eg )	NrJ   r   r5   r+   r|   FrL   r   r   r   rj   ro   rP   rQ   s       r   rT   &TestDominanceFrontiers.test_domrel_png   s    HJJu%%a+ussssu0
 
 	
 
 ''		u	(=qASUsssssuMMMMr'   c           
      h   / SQn[         R                  " U5      n[         R                  " US5      [        5       [        5       S1S1SS1S1S1[        5       S.:X  d   e[         R                  " UR	                  SS9S5      n[        5       [        5       S1S1SS1S1S1[        5       S.nX4:X  d   eg )	NrW   r   rX   r@   )r   r   r5   r?   r@   r+   r   rX   FrL   r   r   )r   rR   r   rS   expecteds        r   rY   )TestDominanceFrontiers.test_boost_example   s     YJJu%%a+uuss1vssu	0
 	
 		
 	
 ''		u	(=qAuuss1vssu	
 !!!r'   c                     [         R                  " 5       nUR                  / SQ5        [         R                  " US5      nU[	        5       S1S1S1[	        5       S1S1S1S1S.	:X  d   eg )N))b0b1r   b2r   b3)r   r   )r   b5)r   b6)r   b8)r   b7)r   r   )r   r   )r   b4r   r   r   r   )	r   r   r   r   r   r   r   r   r   r   r   add_edges_fromrj   ro   r   grr   s      r   test_discard_issue)TestDominanceFrontiers.test_discard_issue   sx    JJL		
 ##At,%&&&%&&&&

 

 
	
 

r'   c                     [         R                  " 5       nUR                  / SQ5        [         R                  " US5      nUS1S1[	        5       S.:X  d   eg )N))ab)r   c)r   r   r   )r   r   r   r   r   s      r   	test_loop TestDominanceFrontiers.test_loop   sI    JJL	=>##As+C5u359999r'   c                     [         R                  " 5       n/ SQnUR                  U5        [         R                  " US5        g )N))entry_1r   r   r   )r   exit)entry_2r   r   )r   r   r   rj   )r   r   rR   s      r   test_missing_immediate_doms2TestDominanceFrontiers.test_missing_immediate_doms   s6    JJL
$ 	
 	q),r'   c           	          [         R                  " 5       n/ SQnUR                  U5        [         R                  " US5      n[	        5       S1SS11 Sk1 Sk1 SkSS1[	        5       S.nU H!  n[	        X5   5      [	        XE   5      :X  a  M!   e   g )N))entryr   )r   1)r   2)r   3)r   4)r   5)r   6)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   )r   r   rR   rr   answerr)   s         r   test_loops_larger(TestDominanceFrontiers.test_loops_larger  s     JJL
 	
##Aw/U##(##E	
 Aru:VY/// r'   r[   N)r\   r]   r^   r_   r   r`   ra   r   rb   rc   r   r   r%   r6   ro   rd   r2   r7   ry   r}   rT   rY   r   r   r   r   re   r[   r'   r   rg   rg   _   s    [[S288:r}}"?@) A))8 [[Y"--)?"..STRUAV(WX[[S+.K / YK
Q


 N ":
>:-40r'   rg   )r   networkxr   r   rg   r[   r'   r   <module>r      s&     VD VDrL0 L0r'   