
    fi#                     J    d dl Z d dlZ G d d          Z G d d          ZdS )    Nc                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestImmediateDominatorsc                    t          j                    }|                    d           t          j        t           j        t           j        |d           t          j        |          }t          j        t           j        t           j        |d           t          j        ddgg          }t          j        t           j	        t           j        |d           d S Nr      )
nxGraphadd_nodepytestraisesNetworkXNotImplementedimmediate_dominators
MultiGraphDiGraphNetworkXErrorselfGs     /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/networkx/algorithms/tests/test_dominance.pytest_exceptionsz'TestImmediateDominators.test_exceptions   s    HJJ	

1b/1H!QOOOM!b/1H!QOOOJAx  b&(?AFFFFF    c                     t          j                    }|                    d           t          j        |d          ddik    sJ |                    dd           t          j        |d          ddik    sJ d S Nr   )r   r   r
   r   add_edger   s     r   test_singletonz&TestImmediateDominators.test_singleton   sz    JLL	

1&q!,,A6666	

1a&q!,,A666666r   c                     d}t          j        |t          j                              }t          j        |d          d t	          |          D             k    sJ d S )N   create_usingr   c                 6    i | ]}|t          |d z
  d          S r   r   max.0is     r   
<dictcomp>z5TestImmediateDominators.test_path.<locals>.<dictcomp>   &    0T0T0TaCAqMM0T0T0Tr   r   
path_graphr   r   ranger   nr   s      r   	test_pathz!TestImmediateDominators.test_path   s[    M!"*,,777&q!,,0T0T5QR880T0T0TTTTTTTr   c                     d}t          j        |t          j                              }t          j        |d          d t	          |          D             k    sJ d S )Nr   r   r   c                 6    i | ]}|t          |d z
  d          S r!   r"   r$   s     r   r'   z6TestImmediateDominators.test_cycle.<locals>.<dictcomp>   r(   r   )r   cycle_graphr   r   r+   r,   s      r   
test_cyclez"TestImmediateDominators.test_cycle   s[    N12:<<888&q!,,0T0T5QR880T0T0TTTTTTTr   c                     ddk    sJ t          j        t          j                              }t          j        |dz            fdt	          dz            D             k    sJ d S )Nr   r   r      c                 >    i | ]}|t          |d z
  dz            S r   r4   r"   )r%   r&   r-   s     r   r'   z<TestImmediateDominators.test_unreachable.<locals>.<dictcomp>%   s:     6
 6
 6
&'As1q5!q&!!6
 6
 6
r   r)   )r   r   r-   s     @r   test_unreachablez(TestImmediateDominators.test_unreachable!   s    1uuuuM!"*,,777&q!q&11 6
 6
 6
 6
+0a+;+;6
 6
 6
 
 
 
 
 
 
r   c                     g d}t          j        |          }t          j        |d          t                              t          dd          d          k    sJ dS )
        Graph taken from figure 2 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        r6   r4   r      r4   )   r   )r   r=   )r   r>   r   r      Nr   r   r   dictfromkeysr+   r   edgesr   s      r   test_irreducible1z)TestImmediateDominators.test_irreducible1)   sY    
 A@@Ju&q!,,eAqkk10M0MMMMMMMr   c                     g d}t          j        |          }t          j        |d          }|t                              t          dd          d          k    sJ dS )
        Graph taken from figure 4 of "A simple, fast dominance algorithm." (2006).
        https://hdl.handle.net/1911/96345
        	r6   r;   r4   r=   r<   )r>   r4   )r>   r=   )r   r   r?   r>   )r?   r   r?   r      Nr@   r   rD   r   results       r   test_irreducible2z)TestImmediateDominators.test_irreducible22   s^     YXXJu(A..uQ{{A66666666r   c                     g d}t          j        |          }t          j        |d          }|dddddddk    sJ t          j        |                    d          d          }|dddddddk    sJ d S )	Nr6   rI   )r4   r>   )r4   r?   )r=   r   r>   r   )r   r4   r   r4   r   r4   r=   r>   r   r?   Fcopyr?   r   r   r   r   reverserL   s       r   test_domrel_pngz'TestImmediateDominators.test_domrel_png=   s    HHHJu(A..Q1qQ1======()>)>BBQ1qQ1========r   c           
          g d}t          j        |          }t          j        |d          }|dddddddddk    sJ t          j        |                    d          d	          }|dd	d	dd
d	dd	dk    sJ d S )N	)r   r   r6   )r   r=   )r4   rK   )r=   r>   rQ   )r>   r?   )r   rK   rJ   r   r   r=   r>   r   r   r4   r=   r>   r   r?   rK   FrS   rK   r   rU   rL   s       r   test_boost_examplez*TestImmediateDominators.test_boost_exampleG   s     YXXJu(A..Q1qQ1qIIIIII()>)>BBQ1qQ1qIIIIIIIIr   N)__name__
__module____qualname__r   r   r.   r2   r7   rE   rN   rW   r[    r   r   r   r      s        G G G7 7 7U U U
U U U

 
 
N N N	7 	7 	7> > >	J 	J 	J 	J 	Jr   r   c                   \    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S )TestDominanceFrontiersc                    t          j                    }|                    d           t          j        t           j        t           j        |d           t          j        |          }t          j        t           j        t           j        |d           t          j        ddgg          }t          j        t           j	        t           j        |d           d S r   )
r   r	   r
   r   r   r   dominance_frontiersr   r   r   r   s     r   r   z&TestDominanceFrontiers.test_exceptionsT   s    HJJ	

1b/1GANNNM!b/1GANNNJAx  b&(>1EEEEEr   c                 &   t          j                    }|                    d           t          j        |d          dt	                      ik    sJ |                    dd           t          j        |d          dt	                      ik    sJ d S r   )r   r   r
   rc   setr   r   s     r   r   z%TestDominanceFrontiers.test_singleton]   s    JLL	

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

1a%a++355z999999r   c                     d}t          j        |t          j                              }t          j        |d          d t	          |          D             k    sJ d S )Nr   r   r   c                 ,    i | ]}|t                      S r_   re   r$   s     r   r'   z4TestDominanceFrontiers.test_path.<locals>.<dictcomp>g       /K/K/KQ355/K/K/Kr   r   r*   r   rc   r+   r,   s      r   r.   z TestDominanceFrontiers.test_pathd   sZ    M!"*,,777%a++/K/K%((/K/K/KKKKKKKr   c                     d}t          j        |t          j                              }t          j        |d          d t	          |          D             k    sJ d S )Nr   r   r   c                 ,    i | ]}|t                      S r_   rh   r$   s     r   r'   z5TestDominanceFrontiers.test_cycle.<locals>.<dictcomp>l   ri   r   )r   r1   r   rc   r+   r,   s      r   r2   z!TestDominanceFrontiers.test_cyclei   sZ    N12:<<888%a++/K/K%((/K/K/KKKKKKKr   c                     d}|dk    sJ t          j        |t          j                              }t          j        ||dz            d t	          |dz  |          D             k    sJ d S )Nr   r   r   r4   c                 ,    i | ]}|t                      S r_   rh   r$   s     r   r'   z;TestDominanceFrontiers.test_unreachable.<locals>.<dictcomp>r   s    4X4X4X!Q4X4X4Xr   rj   r,   s      r   r7   z'TestDominanceFrontiers.test_unreachablen   su    1uuuuM!"*,,777%aa004X4XuQRSVUVGWGW4X4X4XXXXXXXr   c                     g d}t          j        |          }t          j        |d          dhdhdhdht                      dk    sJ dS )r9   r:   r   r4   r   )r   r4   r=   r>   r   Nr   r   rc   re   rC   s      r   rE   z(TestDominanceFrontiers.test_irreducible1t   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 )rG   rH   r?   r4   r   r=   rR   Nrp   rC   s      r   rN   z(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 )	NrP   r   r4   r   rR   FrS   r?   r   r   rc   re   rV   rL   s       r   rW   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 )	NrY   r   rK   r>   rZ   FrS   r   rs   )r   rD   r   rM   expecteds        r   r[   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rx   b2rz   b3)r|   rx   )rx   b5)r}   b6)r}   b8)r~   b7)r   r   )r   r|   )r|   b4rw   r|   r   rx   )	r   r}   r~   r   rw   rx   rz   r|   r   r   r   add_edges_fromrc   re   r   gdfs      r   test_discard_issuez)TestDominanceFrontiers.test_discard_issue   s    JLL	  	
 	
 	
 #At,,%%&&&%%&&&&

 

 

 

 

 

 

 

r   c                     t          j                    }|                    g d           t          j        |d          }|t	                      t	                      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   sg    JLL	===>>>#As++355suu35599999999r   c                     t          j                    }g d}|                    |           t          j        |d           d S )N))entry_1rx   ry   r{   )r|   exit)entry_2r|   r   )r   r   r   rc   )r   r   rD   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   rD   r   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.   r2   r7   rE   rN   rW   r[   r   r   r   r   r_   r   r   ra   ra   S   s        F F F: : :L L L
L L L
Y Y Y
 
 

 
 
 N N N " " ":
 
 
>: : :- - -40 0 0 0 0r   ra   )r   networkxr   r   ra   r_   r   r   <module>r      s        JJ JJ JJ JJ JJ JJ JJ JJZK0 K0 K0 K0 K0 K0 K0 K0 K0 K0r   