
    PiS&                     J    d dl Z d dlZ G d d          Z G d d          ZdS )    Nc                      e Zd Zej                            d ej                     ej                    g          d             Z	d Z
d Zej                            dej        ej        g          ej                            dg d          d                         Zd	 Zej                            d
dgg ddfg ddfg          d             Zd Zd ZdS )TestImmediateDominatorsGc                     t          j        t          j        d          5  t          j        |d           ddd           dS # 1 swxY w Y   dS )z?Check that `immediate_dominators` raises for undirected graphs.not implemented for undirectedmatchr   N)pytestraisesnxNetworkXNotImplementedimmediate_dominatorsselfr   s     |/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/networkx/algorithms/tests/test_dominance.pytest_raises_undirectedz.TestImmediateDominators.test_raises_undirected   s     ]%-N
 
 
 	* 	* #Aq)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*   AAAc                     t          j        dt           j                  }t          j        t           j        d          5  t          j        |d           ddd           dS # 1 swxY w Y   dS )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   s    N12:666]2+;??? 	* 	*#Aq)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*   A$$A(+A(c                     t          j                    }|                    d           t          j        |d          i k    sJ |                    dd           t          j        |d          i k    sJ d S Nr   )r   r   add_noder   add_edger   s     r   test_singletonz&TestImmediateDominators.test_singleton   sr    JLL	

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

1a&q!,,222222    genn   
      c                      ||t          j                              }t          j        |d          }|d t          d|          D             k    sJ dS )zBCheck `immediate_dominators` is correct for path and cycle graphs.r   r   c                     i | ]}||d z
  	S r    .0is     r   
<dictcomp>z?TestImmediateDominators.test_path_and_cycle.<locals>.<dictcomp>"       666Q1q5666r#   r   N)r   r   r   range)r   r$   r%   r   idoms        r   test_path_and_cyclez+TestImmediateDominators.test_path_and_cycle   s^     C
---&q!,,66%1++666666666r#   c                     d}t          j        |t          j                              }t          j        |d          }|d t	          d|          D             k    sJ d S )Nr'   r   r   c                     i | ]}||d z
  	S r,   r-   r.   s     r   r1   z<TestImmediateDominators.test_unreachable.<locals>.<dictcomp>(   r2   r#      )r   
path_graphr   r   r3   )r   r%   r   r4   s       r   test_unreachablez(TestImmediateDominators.test_unreachable$   sa    M!"*,,777&q!,,66%1++666666666r#   edgeliststartr   r8   r8   r      r8   )   r   )r'   rA   )r'   rB   r'   	r>   r?   r8   rA   r@   )rB   r8   )rB   rA   )r'   r      rB   )rF   r'   rF   c                     t          j        |          }t          j        ||          }|t                              t          d|          |          k    sJ dS )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fromkeysr3   )r   r;   r<   r   r4   s        r   test_irreduciblez(TestImmediateDominators.test_irreducible*   sR    6 Jx  &q%00t}}U1e__e<<<<<<<<r#   c                     g d}t          j        |          }t          j        |d          }|ddddddk    sJ t          j        |                    d          d          }|dddddd	k    sJ d S )
Nr>   rD   )r8   rB   )r8   rF   )rA   r'   rB   r'   )r'   r8   r   r8   )r8   rA   rB   r'   rF   FcopyrF   r'   r   r8   rA   rB   r'   r   r   r   reverser   edgesr   results       r   test_domrel_pngz'TestImmediateDominators.test_domrel_pngI   s    HHHJu(A..Q1qQ777777()>)>BBQ1qQ7777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        |                    d          d	          }|dd	d	dd
d	ddk    sJ d S )N	)r   r   r>   )r   rA   )r8      )rA   rB   rM   )rB   rF   )r'   rY   rE   r   r   rA   rB   )r   r8   rA   rB   r'   rF   rY   FrN   rY   r'   )r   r   r8   rA   rB   r'   rF   rQ   rS   s       r   test_boost_examplez*TestImmediateDominators.test_boost_exampleS   s     YXXJu(A..Q1qQ1CCCCCC()>)>BBQ1qQ1CCCCCCCCr#   N)__name__
__module____qualname__r
   markparametrizer   Graph
MultiGraphr   r   r"   r9   cycle_graphr5   r:   rJ   rV   rZ   r-   r#   r   r   r      sc       [S828::}r}"?@@* * A@** * *3 3 3 [UR]BN$CDD[S+++..7 7 /. ED77 7 7 [	W===qA
 
 
 	
 (	= 	=) (	=8 8 8	D 	D 	D 	D 	Dr#   r   c                      e Zd Zej                            d ej                     ej                    g          d             Z	d Z
d Zej                            dej         e            fej        dhfg          ej                            dg d          d	                         Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestDominanceFrontiersr   c                     t          j        t          j        d          5  t          j        |d           ddd           dS # 1 swxY w Y   dS )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           dS # 1 swxY w Y   dS )zICheck that `dominance_frontiers` raises when `start` is not in the graph.r   r   r   r   N)r   r   r   r
   r   r   rf   r   s     r   r   z'TestDominanceFrontiers.test_raises_nodeh   s    N12:666]2+;??? 	) 	)"1a(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)r   c                    t          j                    }|                    d           t          j        |d          dt	                      ik    sJ |                    dd           t          j        |d          ddhik    sJ d S r   )r   r   r    rf   setr!   r   s     r   r"   z%TestDominanceFrontiers.test_singletonn   s    JLL	

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

1a%a++A3x777777r#   zgen, dfr   r%   r&   c                      ||t          j                              }t          j        |d          t                              t          |          |          k    sJ dS )zFCheck that `dominance_frontiers` is correct for path and cycle graphs.r   r   N)r   r   rf   rH   rI   r3   )r   r$   dfr%   r   s        r   r5   z*TestDominanceFrontiers.test_path_and_cycleu   sV     C
---%a++t}}U1XXr/J/JJJJJJJr#   c                     d}t          j        |t          j                              }t          j        |d          t                              t          d|          t                                k    sJ d S )Nr'   r   r   )r   r9   r   rf   rH   rI   r3   ri   )r   r%   r   s      r   r:   z'TestDominanceFrontiers.test_unreachable|   s_    M!"*,,777%a++t}}U1a[[#%%/P/PPP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 dS )z
        Graph taken from figure 2 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        r=   r'   r8   r   rP   Nr   r   rf   ri   r   rT   r   s      r   test_irreducible1z(TestDominanceFrontiers.test_irreducible1   sr    
 A@@Ju%a++ssssuu0
 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 dS )z
        Graph taken from figure 4 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        rC   rF   r8   r   rA   r   r8   rA   rB   r'   rF   Nrn   ro   s      r   test_irreducible2z(TestDominanceFrontiers.test_irreducible2   s{    
 YXXJu%a++s1vs1vsuu0
 0
 
 
 
 
 
 
r#   c                 Z   g d}t          j        |          }t          j        |d          t                      dhdhdhdht                      dk    sJ t          j        |                    d          d          }|t                      dhdhdhdht                      dk    sJ d S )	NrL   r   r8   r'   rr   FrN   rF   r   r   rf   ri   rR   rS   s       r   rV   z&TestDominanceFrontiers.test_domrel_png   s    HHHJu%a++uussssuu0
 0
 
 
 
 
 '		u	(=(=qAASUUsssssuuMMMMMMMMr#   c           
         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        |                    d          d          }t                      t                      dhdhddhdhdht                      d}||k    sJ d S )	NrX   r   rY   rB   )r   r   r8   rA   rB   r'   rF   rY   FrN   r   ru   )r   rT   r   rU   expecteds        r   rZ   z)TestDominanceFrontiers.test_boost_example   s     YXXJu%a++uuuuss1vssuu	0
 	0
 	
 	
 	
 	
 '		u	(=(=qAAuuuuss1vssuu	
 	
 !!!!!!r#   c                     t          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 d S )N))b0b1rz   b2r|   b3)r~   rz   )rz   b5)r   b6)r   b8)r   b7)r   r   )r   r~   )r~   b4ry   r~   r   rz   )	r   r   r   r   ry   rz   r|   r~   r   r   r   add_edges_fromrf   ri   r   grk   s      r   test_discard_issuez)TestDominanceFrontiers.test_discard_issue   s    JLL	  	
 	
 	
 #At,,%%&&&%%&&&&

 

 

 

 

 

 

 

r#   c                     t          j                    }|                    g d           t          j        |d          }|dhdht	                      dk    sJ d S )N))ab)r   c)r   r   r   )r   r   r   r   r   s      r   	test_loopz TestDominanceFrontiers.test_loop   sc    JLL	===>>>#As++C5u35599999999r#   c                     t          j                    }g d}|                    |           t          j        |d           d S )N))entry_1rz   r{   r}   )r~   exit)entry_2r~   r   )r   r   r   rf   )r   r   rT   s      r   test_missing_immediate_domsz2TestDominanceFrontiers.test_missing_immediate_doms   sO    JLL
 
 
$ 	
 	q),,,,,r#   c           	      J   t          j                    }g d}|                    |           t          j        |d          }t	                      dhddhh dh dh dddht	                      d}|D ]0}t	          ||                   t	          ||                   k    sJ 1d S )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   rT   rk   answerr%   s         r   test_loops_largerz(TestDominanceFrontiers.test_loops_larger  s     JLL
 
 
 	
#Aw//UU####(((####EE	
 	
  	0 	0Ar!u::VAY/////	0 	0r#   N)r[   r\   r]   r
   r^   r_   r   r`   ra   r   r   r"   r9   ri   rb   r5   r:   rp   rs   rV   rZ   r   r   r   r   r-   r#   r   rd   rd   _   sq       [S828::}r}"?@@) ) A@)) ) )8 8 8 [Y"-)?".STRUAV(WXX[S+++..K K /. YXK
Q Q Q

 
 

 
 
 N N N " " ":
 
 
>: : :- - -40 0 0 0 0r#   rd   )r
   networkxr   r   rd   r-   r#   r   <module>r      s        VD VD VD VD VD VD VD VDrL0 L0 L0 L0 L0 L0 L0 L0 L0 L0r#   