Ë
    ©Ó^jS&  ã                   ó<   — 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     ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/networkx/algorithms/tests/test_dominance.pyÚtest_raises_undirectedz.TestImmediateDominators.test_raises_undirected   sC   € ô �]‰]Ü×%Ñ%Ð-Nô
ñ 	*ô ×#Ñ# A qÔ)÷	*÷ 	*ñ 	*úó   ¦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   sO   € ä�N‰N˜1¬2¯:©:Ô6ˆÜ�]‰]œ2×+Ñ+°;Ô?ñ 	*Ü×#Ñ# A qÔ)÷	*÷ 	*ñ 	*úó   Á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\   € Ü�J‰J‹LˆØ	�
‰
�1ŒÜ×&Ñ& q¨!Ó,°Ò2Ð2Ð2Ø	�
‰
�1�aÔÜ×&Ñ& 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   sR   € ñ �¤§
¡
£Ô-ˆÜ×&Ñ& q¨!Ó,ˆØ¬%°°1«+Ö6 Q˜˜1˜q™5™Ò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$   sY   € ØˆÜ�M‰M˜!¬"¯*©*«,Ô7ˆÜ×&Ñ& q¨!Ó,ˆØ¬%°°1«+Ö6 Q˜˜1˜q™5™Ò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 �J‰J�xÓ ˆÜ×&Ñ& q¨%Ó0ˆØ”t—}‘}¤U¨1¨e£_°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ˆÜ�J‰J�uÓˆÜ×(Ñ(¨¨AÓ.ˆØ˜Q 1¨¨q°QÑ7Ò7Ð7Ð7ä×(Ñ(¨¯©¸¨Ó)>ÀÓBˆØ˜Q 1¨¨q°QÑ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ˆÜ�J‰J�uÓˆÜ×(Ñ(¨¨AÓ.ˆØ˜Q 1¨¨q°Q¸1ÀÑCÒCÐCÐCä×(Ñ(¨¯©¸¨Ó)>ÀÓBˆØ˜Q 1¨¨q°Q¸1ÀÑ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è   „ Ø‡[�[×Ñ˜S 8 2§8¡8£:¨}¨r¯}©}«Ð"?Ó@ñ*ó Að*ò*ò3ð ‡[�[×Ñ˜U R§]¡]°B·N±NÐ$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`   sC   € ô �]‰]Ü×%Ñ%Ð-Nô
ñ 	)ô ×"Ñ" 1 aÔ(÷	)÷ 	)ñ 	)ú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   sO   € ä�N‰N˜1¬2¯:©:Ô6ˆÜ�]‰]œ2×+Ñ+°;Ô?ñ 	)Ü×"Ñ" 1 aÔ(÷	)÷ 	)ñ 	)ú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   € Ü�J‰J‹LˆØ	�
‰
�1ŒÜ×%Ñ% a¨Ó+°´3³5¨zÒ9Ð9Ð9Ø	�
‰
�1�aÔÜ×%Ñ% a¨Ó+°°A°3¨xÒ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¯}©}¼UÀ1»XÀrÓ/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   € ØˆÜ�M‰M˜!¬"¯*©*«,Ô7ˆÜ×%Ñ% a¨Ó+¬t¯}©}¼UÀ1Àa»[Ì#Ë%Ó/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ˆÜ�J‰J�uÓˆÜ×%Ñ% 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ˆÜ�J‰J�uÓˆÜ×%Ñ% a¨Ó+ØˆsØ�1ˆvØˆsØ�1ˆvØˆ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ˆÜ�J‰J�uÓˆÜ×%Ñ% a¨Ó+Ü‹uØˆsØˆsØˆsØˆsÜ‹uñ0
ò 
ð 	
ð 
ô ×'Ñ'¨¯	©	°u¨	Ó(=¸qÓAˆØœS›U¨ s°¨s¸°sÀ¸sÄsÃuÑ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ˆÜ�J‰J�uÓˆÜ×%Ñ% a¨Ó+Ü‹uÜ‹uØˆsØˆsØ�1ˆvØˆsØˆsÜ‹uñ	0
ò 	
ð 		
ð 	
ô ×'Ñ'¨¯	©	°u¨	Ó(=¸qÓAˆä‹uÜ‹uØˆsØˆsØ�1ˆvØˆ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   € ä�J‰J‹LˆØ	×Ñòô	
ô ×#Ñ# A tÓ,ˆØÜ“%Ø�&Ø�&Ø�&Ü“%Ø�&Ø�&Ø�&Ø�&ñ

ò 

ð 
	
ñ 

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   € Ü�J‰J‹LˆØ	×ÑÒ=Ô>Ü×#Ñ# A sÓ+ˆØ˜C˜5¨ u´3³5Ñ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   € ä�J‰J‹Lˆò
ˆð$ 	
×Ñ˜Ôô 	×Ñ˜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”   € ô �J‰J‹Lˆò
ˆð 	
×Ñ˜ÔÜ×#Ñ# A wÓ/ˆä“UØ�Ø˜#�Ú#Ú(Ú#Ø˜#�Ü“Eñ	
ˆð ò 	0ˆAÜ�r˜!‘u“:¤ V¨A¡Y£Ó/Ð/Ð/ñ	0r#   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Ò   „ Ø‡[�[×Ñ˜S 8 2§8¡8£:¨}¨r¯}©}«Ð"?Ó@ñ)ó Að)ò)ò8ð ‡[�[×Ñ˜Y¨"¯-©-¹»Ð)?À"Ç.Á.ÐSTÐRUÐAVÐ(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#   