
    ܛ7iS&                     <    d dl Z d dlZ G d d      Z G d d      Zy)    Nc                      e Zd Zej                  j                  d ej                          ej                         g      d        Z	d Z
d Zej                  j                  dej                  ej                  g      ej                  j                  dg d      d               Zd	 Zej                  j                  d
dgg ddfg ddfg      d        Zd Zd Zy)TestImmediateDominatorsGc                     t        j                  t        j                  d      5  t        j                  |d       ddd       y# 1 sw Y   yxY w)z?Check that `immediate_dominators` raises for undirected graphs.not implemented for undirectedmatchr   N)pytestraisesnxNetworkXNotImplementedimmediate_dominatorsselfr   s     e/home/rose/Desktop/poly/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_dominance.pytest_raises_undirectedz.TestImmediateDominators.test_raises_undirected   s>     ]]%%-N
 ##Aq)
 
 
   AAc                     t        j                  dt         j                        }t        j                  t         j
                  d      5  t        j                  |d       ddd       y# 1 sw Y   yxY w)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_nodez(TestImmediateDominators.test_raises_node   sG    NN12::6]]2++;?##Aq) @??   A++A4c                     t        j                         }|j                  d       t        j                  |d      i k(  sJ |j	                  dd       t        j                  |d      i k(  sJ y Nr   )r   r   add_noder   add_edger   s     r   test_singletonz&TestImmediateDominators.test_singleton   s\    JJL	

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

1a&&q!,222    genn   
      c                      ||t        j                               }t        j                  |d      }|t        d|      D ci c]  }||dz
  
 c}k(  sJ yc c}w )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_cyclez+TestImmediateDominators.test_path_and_cycle   sV     

-&&q!,%1+6+Q1q5+66666s   Ac                     d}t        j                  |t        j                               }t        j                  |d      }|t	        d|      D ci c]  }||dz
  
 c}k(  sJ y c c}w )Nr'   r   r      )r   
path_graphr   r   r+   )r   r%   r   r,   r-   s        r   test_unreachablez(TestImmediateDominators.test_unreachable$   s]    MM!"**,7&&q!,%1+6+Q1q5+66666s   A&edgeliststartr   r0   r0   r      r0   )   r   )r'   r9   )r'   r:   r'   	r6   r7   r0   r9   r8   )r:   r0   )r:   r9   )r'   r      r:   )r>   r'   r>   c                     t        j                  |      }t        j                  ||      }|t        j	                  t        d|      |      k(  sJ y)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   r3   r4   r   r,   s        r   test_irreduciblez(TestImmediateDominators.test_irreducible*   sC    6 JJx &&q%0t}}U1e_e<<<<r#   c                     g d}t        j                  |      }t        j                  |d      }|ddddddk(  sJ t        j                  |j                  d      d      }|dddddd	k(  sJ y )
Nr6   r<   )r0   r:   )r0   r>   )r9   r'   r:   r'   )r'   r0   r   r0   )r0   r9   r:   r'   r>   Fcopyr>   r'   r   r0   r9   r:   r'   r   r   r   reverser   edgesr   results       r   test_domrel_pngz'TestImmediateDominators.test_domrel_pngI   sv    HJJu((A.Q1qQ7777(()>BQ1qQ7777r#   c           	          g d}t        j                  |      }t        j                  |d      }|ddddddddk(  sJ t        j                  |j                  d      d	      }|dd	d	dd
d	ddk(  sJ y )N	)r   r   r6   )r   r9   )r0      )r9   r:   rE   )r:   r>   )r'   rQ   r=   r   r   r9   r:   )r   r0   r9   r:   r'   r>   rQ   FrF   rQ   r'   )r   r   r0   r9   r:   r'   r>   rI   rK   s       r   test_boost_examplez*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__r
   markparametrizer   Graph
MultiGraphr   r   r"   r1   cycle_graphr.   r2   rB   rN   rR    r#   r   r   r      s    [[S8288:}r}}"?@* A**3 [[UR]]BNN$CD[[S+.7 / E77 [[	W=qA
 	
(	=)(	=8	Dr#   r   c                      e Zd Zej                  j                  d ej                          ej                         g      d        Z	d Z
d Zej                  j                  dej                   e       fej                  dhfg      ej                  j                  dg d      d	               Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestDominanceFrontiersr   c                     t        j                  t        j                  d      5  t        j                  |d       ddd       y# 1 sw Y   yxY w)z>Check that `dominance_frontiers` raises for undirected graphs.r   r   r   N)r
   r   r   r   dominance_frontiersr   s     r   r   z-TestDominanceFrontiers.test_raises_undirected`   s>     ]]%%-N
 ""1a(
 
 
r   c                     t        j                  dt         j                        }t        j                  t         j
                  d      5  t        j                  |d       ddd       y# 1 sw Y   yxY w)zICheck that `dominance_frontiers` raises when `start` is not in the graph.r   r   r   r   N)r   r   r   r
   r   r   r_   r   s     r   r   z'TestDominanceFrontiers.test_raises_nodeh   sG    NN12::6]]2++;?""1a( @??r   c                     t        j                         }|j                  d       t        j                  |d      dt	               ik(  sJ |j                  dd       t        j                  |d      ddhik(  sJ y r   )r   r   r    r_   setr!   r   s     r   r"   z%TestDominanceFrontiers.test_singletonn   sh    JJL	

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

1a%%a+A3x777r#   zgen, dfr   r%   r&   c                      ||t        j                               }t        j                  |d      t        j	                  t        |      |      k(  sJ y)zFCheck that `dominance_frontiers` is correct for path and cycle graphs.r   r   N)r   r   r_   r@   rA   r+   )r   r$   dfr%   r   s        r   r.   z*TestDominanceFrontiers.test_path_and_cycleu   s@     

-%%a+t}}U1Xr/JJJJr#   c                     d}t        j                  |t        j                               }t        j                  |d      t        j                  t        d|      t                     k(  sJ y )Nr'   r   r   )r   r1   r   r_   r@   rA   r+   rb   )r   r%   r   s      r   r2   z'TestDominanceFrontiers.test_unreachable|   sK    MM!"**,7%%a+t}}U1a[#%/PPPPr#   c                     g d}t        j                  |      }t        j                  |d      dhdhdhdht               dk(  sJ y)z
        Graph taken from figure 2 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        r5   r'   r0   r   rH   Nr   r   r_   rb   r   rL   r   s      r   test_irreducible1z(TestDominanceFrontiers.test_irreducible1   sU    
 AJJu%%a+ssssu0
 
 	
 
r#   c                     g d}t        j                  |      }t        j                  |d      dhddhdhddhdht               dk(  sJ y)z
        Graph taken from figure 4 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        r;   r>   r0   r   r9   r   r0   r9   r:   r'   r>   Nrg   rh   s      r   test_irreducible2z(TestDominanceFrontiers.test_irreducible2   s^    
 YJJu%%a+s1vs1vsu0
 
 	
 
r#   c                 2   g d}t        j                  |      }t        j                  |d      t               dhdhdhdht               dk(  sJ t        j                  |j	                  d      d      }|t               dhdhdhdht               dk(  sJ y )	NrD   r   r0   r'   rk   FrF   r>   r   r   r_   rb   rJ   rK   s       r   rN   z&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           
      f   g d}t        j                  |      }t        j                  |d      t               t               dhdhddhdhdht               dk(  sJ t        j                  |j	                  d      d      }t               t               dhdhddhdhdht               d}||k(  sJ y )	NrP   r   rQ   r:   )r   r   r0   r9   r:   r'   r>   rQ   FrF   r   rn   )r   rL   r   rM   expecteds        r   rR   z)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                     t        j                         }|j                  g d       t        j                  |d      }|t	               dhdhdht	               dhdhdhdhd	k(  sJ y )N))b0b1rs   b2ru   b3)rw   rs   )rs   b5)rx   b6)rx   b8)ry   b7)rz   r{   )r{   rw   )rw   b4rr   rw   r{   rs   )	r|   rx   ry   r{   rr   rs   ru   rw   rz   r   r   add_edges_fromr_   rb   r   grd   s      r   test_discard_issuez)TestDominanceFrontiers.test_discard_issue   sx    JJL		
 ##At,%&&&%&&&&

 

 
	
 

r#   c                     t        j                         }|j                  g d       t        j                  |d      }|dhdht	               dk(  sJ y )N))ab)r   c)r   r   r   )r   r   r   r}   r   s      r   	test_loopz TestDominanceFrontiers.test_loop   sI    JJL	=>##As+C5u359999r#   c                     t        j                         }g d}|j                  |       t        j                  |d       y )N))entry_1rs   rt   rv   )rw   exit)entry_2rw   r   )r   r   r~   r_   )r   r   rL   s      r   test_missing_immediate_domsz2TestDominanceFrontiers.test_missing_immediate_doms   s6    JJL
$ 	
 	q),r#   c           	         t        j                         }g d}|j                  |       t        j                  |d      }t	               dhddhh dh dh dddht	               d}|D ]!  }t	        ||         t	        ||         k(  r!J  y )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   rL   rd   answerr%   s         r   test_loops_largerz(TestDominanceFrontiers.test_loops_larger  s     JJL
 	
##Aw/U##(##E	
 Ar!u:VAY/// r#   N)rS   rT   rU   r
   rV   rW   r   rX   rY   r   r   r"   r1   rb   rZ   r.   r2   ri   rl   rN   rR   r   r   r   r   r[   r#   r   r]   r]   _   s    [[S8288:}r}}"?@) A))8 [[Y"--)?"..STRUAV(WX[[S+.K / YK
Q


 N ":
>:-40r#   r]   )r
   networkxr   r   r]   r[   r#   r   <module>r      s&     VD VDrL0 L0r#   