§
    ƒÛgk«  ã                   óÚ  — d dl Z d dlZd dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZ  e¦   «         Zde_         e¦   «         Zde_         e¦   «         Zde_        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„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z- G d„ d e¦  «        Z. G d!„ d"e¦  «        Z/ G d#„ d$e¦  «        Z0e1d%k    r ej2        ¦   «          dS dS )&é    N)ÚCFGraphÚControlFlowAnalysis)Úcompile_isolatedÚFlags)Útypes)ÚFunctionIdentityÚByteCodeÚ_fix_LOAD_GLOBAL_arg)Ú	PYVERSION)ÚTestCaseTc                 ó8   — d}t          | ¦  «        D ]}||z  }Œ|S ©Nr   ©Úrange©ÚxÚyÚresultÚis       úS/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_flow_control.pyÚfor_loop_usecase1r      s,   € Ø€FÝ�1‰XŒXð ð ˆØ�!‰ˆˆØ€Mó    c                 ób   — d}t          t          | |d¦  «        ¦  «        D ]\  }}|||z  z  }Œ|S )Nr   éÿÿÿÿ)Ú	enumerater   ©r   r   r   r   Újs        r   Úfor_loop_usecase2r      s@   € Ø€FÝ�%  1 b™/œ/Ñ*Ô*ð ð ‰ˆˆ1Ø�!�a‘%‰ˆˆØ€Mr   c                 ó&   — d}| |g}|D ]}||z  }Œ|S r   © )r   r   r   Úlstr   s        r   Úfor_loop_usecase3r"   #   s/   € Ø€FØˆaˆ&€CØð ð ˆØ�!‰ˆˆØ€Mr   c                 ó\   — d}t          d¦  «        D ]}t          d¦  «        D ]}|dz  }ŒŒ|S )Nr   é
   é   r   r   s        r   Úfor_loop_usecase4r&   +   sF   € Ø€FÝ�2‰YŒYð ð ˆÝ�r‘”ð 	ð 	ˆAØ�a‰KˆFˆFð	à€Mr   c                 óH   — d}t          | ¦  «        D ]}|dz  }||k    r nŒ|S ©Nr   r%   r   r   s       r   Úfor_loop_usecase5r)   3   s=   € Ø€FÝ�1‰XŒXð ð ˆØ�!‰ˆØ�AŠ:ˆ:ØˆEð à€Mr   c                 óF   — d}t          | ¦  «        D ]}||k    rŒ	|dz  }Œ|S r(   r   r   s       r   Úfor_loop_usecase6r+   <   s8   € Ø€FÝ�1‰XŒXð ð ˆØˆqŠ5ˆ5ØØ�!‰ˆˆØ€Mr   c                 óX   — t          | ¦  «        D ]}d} t          | ¦  «        D ]}  dS ŒdS r(   r   )r   r   r   r   s       r   Úfor_loop_usecase7r-   E   sB   € Ý�1‰XŒXð ð ˆØˆÝ�q‘”ð 	ð 	ˆAØ�1�1�1àØˆ1r   c                 óH   — d}t          | ||| z
  dz   ¦  «        D ]}|dz  }Œ|S r(   r   r   s       r   Úfor_loop_usecase8r/   O   s:   € Ø€FÝ�1�a˜˜Q™ ™Ñ#Ô#ð ð ˆØ�!‰ˆˆØ€Mr   c                 ó€   — d}t          | ¦  «        D ]+}d} t          | ¦  «        D ]}|| dz  k    r||z  } nŒ||z  }Œ,|S )Nr   é   r   )r   r   Úzr   r   s        r   Úfor_loop_usecase9r3   V   sg   € Ø	€AÝ�1‰XŒXð ð ˆØˆÝ�q‘”ð 	ð 	ˆAØ�A˜‘EŠzˆzØ�Q‘�Ø�ð ð �‰FˆAøà€Hr   c                 óH   — t          | ¦  «        D ]}||k    r|} nŒ|dz  }|S )Nr1   r   )r   r   r   r2   s       r   Úfor_loop_usecase10r5   d   s?   € Ý�1‰XŒXð ð ˆØ�Š6ˆ6ØˆAØˆEð ð �‰EˆØ€Hr   c                 ó:   — d}d}|| k     r||z  }|dz  }|| k     °|S r(   r    r   s       r   Úwhile_loop_usecase1r7   n   s9   € Ø€FØ	€AØ
ˆaŠ%ˆ%Ø�!‰ˆØ	ˆQ‰ˆð ˆaŠ%ˆ%ð €Mr   c                 ó,   — d}|| k    r|dz  }|| k    °|S r(   r    ©r   r   r   s      r   Úwhile_loop_usecase2r:   w   s)   € Ø€FØ
�AŠ+ˆ+Ø�!‰ˆð �AŠ+ˆ+à€Mr   c                 óf   — d}d}d}|| k     r$||k     r|||z   z  }|dz  }|dz  }||k     °|| k     °$|S r(   r    r   s        r   Úwhile_loop_usecase3r<   ~   s_   € Ø€FØ	€AØ	€AØ
ˆaŠ%ˆ%Ø�!ŠeˆeØ�a˜!‘e‰OˆFØ�‰FˆAØ�‰FˆAð �!Šeˆeð ˆaŠ%ˆ%ð
 €Mr   c                 ó&   — d}	 |dz  }|| k    rnŒ|S )Nr   Tr%   r    r9   s      r   Úwhile_loop_usecase4r>   Š   s-   € Ø€FðØ�!‰ˆØ�AŠ:ˆ:Øðð €Mr   c                 óD   — d}|| k     r||k    r|dz  }Œ|dz  }|| k     °|S )Nr   r1   r%   r    r9   s      r   Úwhile_loop_usecase5r@   “   s@   € Ø€FØ
�1Š*ˆ*Ø�AŠ:ˆ:Ø�a‰KˆFØØ�!‰ˆð	 �1Š*ˆ*ð
 €Mr   c                 ó$   — | dk    rn|dk    rn	 dS )Nr   Tr    ©r   r   s     r   Úifelse_usecase1rC   �   s"   € Øˆ1‚u€uØØ	
ˆQŠˆØàØˆ4r   c                 ó2   — | |k    rdS | dk    s|dk    rdS dS )Nr%   r   r1   é   r    rB   s     r   Úifelse_usecase2rF   §   s+   € Øˆ1‚u€uØˆqØ	
ˆaŠˆ�1˜’6�6Øˆqàˆqr   c                 óF   — | dk    r|dk    rdS |dk     rdS dS | dk     rdS dS r(   r    rB   s     r   Úifelse_usecase3rH   °   s?   € Øˆ1‚u€uØˆqŠ5ˆ5Ø�1Ø�ŠUˆUØ�1à�1Ø	
ˆQŠˆØˆqàˆqr   c                 ó   — | |k    rdS d S )Nr%   r    rB   s     r   Úifelse_usecase4rJ   ¾   s   € ØˆA‚v€vØˆqð €vr   c                 ó   — | |k    rdndS )NTFr    rB   s     r   Úternary_ifelse_usecase1rL   Ã   s   € Ø�q’5�5ˆ4ˆ4˜eÐ#r   c                 óP   — | }|}	 	 ||dz
  k    rn|dz  }Œ|dz  }||k    rnŒ||fS )NTr%   r    )r   r   ÚLr   s       r   Údouble_infinite_looprO   Ç   s[   € Ø	€AØ	€Aðð	Ø�A˜‘EŠzˆzØØ�‰FˆAð	ð 	
ˆQ‰ˆØ�Š6ˆ6Øðð ˆaˆ4€Kr   c                  ó*   — 	 d S # t           $ r Y d S w xY w©N)Ú	Exceptionr    r   r   Útry_except_usecaserS   ×   s.   € ðØˆøÝð ð ð Øˆˆðøøøs   „
‘c                   óh  — e Zd Zefd„Zefd„Zd„ Zefd„Zd„ Zefd„Z	d„ Z
efd„Zd	„ Zefd
„Zd„ Zefd„Zd„ Zefd„Zd„ Zefd„Zd„ Zefd„Zd„ Zefd„Zd„ Zefd„Zd„ Zefd„Zd„ Zefd„Zd„ Zefd„Zd„ Z efd„Z!d„ Z"efd „Z#d!„ Z$efd"„Z%d#„ Z&efd$„Z'd%„ Z(efd&„Z)d'„ Z*efd(„Z+d)„ Z,efd*„Z-d+„ Z.d,S )-ÚTestFlowControlc                 ó  — t          |t          j        t          j        f|¬¦  «        }|j        }t	          j        ||¦  «        D ]¹\  }}d }	d }
	  |||¦  «        }n# t          $ r}|}	Y d }~nd }~ww xY w	  |||¦  «        }|	�|                      d|	z   ¦  «         |                      ||¦  «         Œn# t          $ r?}|	€‚ |}
|                      t          |	¦  «        t          |
¦  «        ¦  «         Y d }~Œ²d }~ww xY wd S )N©Úflagsz(Invalid for pure-python but numba works
)
r   r   ÚintpÚentry_pointÚ	itertoolsÚproductrR   ÚfailÚassertEqualÚtype)ÚselfÚpyfuncÚ
x_operandsÚ
y_operandsrX   ÚcrÚcfuncr   r   ÚpyerrÚcerrÚpyresÚeÚcress                 r   Úrun_testzTestFlowControl.run_testà   sS  € å˜f¥u¤zµ5´:Ð&>ÀeÐLÑLÔLˆØ”ˆÝÔ% j°*Ñ=Ô=ð 	.ð 	.‰DˆAˆqØˆEØˆDðØ˜˜q !™œ��øÝð ð ð Ø������øøøøðøøøð.Ø�u˜Q ‘{”{�ð Ð$Ø—I’IÐIØ#ñ$ñ %ô %ð %à× Ò  ¨Ñ-Ô-Ð-Ð-øõ ð :ð :ð :Ø�=ØØ�Ø× Ò ¥ e¡¤­d°4©j¬jÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð	:øøøð	.ð 	.s0   ÁAÁ
A2Á&A-Á-A2Á6B3Â3
C<Â=5C7Ã7C<c                 óH   — |                       t          g d¢dg|¬¦  «         d S )N©iöÿÿÿr   r$   r   rW   )rk   r   ©r`   rX   s     r   Útest_for_loop1zTestFlowControl.test_for_loop1ù   s)   € Ø�ŠÕ'¨¨¨¸°sÀ%ˆÑHÔHÐHÐHÐHr   c                 ó<   — |                       t          ¬¦  «         d S ©NrW   )ro   Úno_pyobj_flags©r`   s    r   Útest_for_loop1_npmz"TestFlowControl.test_for_loop1_npmü   ó   € Ø×Ò¥.ÐÑ1Ô1Ð1Ð1Ð1r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S )Nrm   rW   )rk   r   rn   s     r   Útest_for_loop2zTestFlowControl.test_for_loop2ÿ   s9   € Ø�ŠÕ'¨¨¨°|°|°|Ø!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S rq   )rw   rr   rs   s    r   Útest_for_loop2_npmz"TestFlowControl.test_for_loop2_npm  ru   r   c                 óF   — |                       t          dgdg|¬¦  «         dS )z(
        List requires pyobject
        r%   r1   rW   N)rk   r"   rn   s     r   Útest_for_loop3zTestFlowControl.test_for_loop3  s7   € ð 	�ŠÕ'¨!¨¨q¨cØ!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S rq   )r{   rr   rs   s    r   Útest_for_loop3_npmz"TestFlowControl.test_for_loop3_npm  ru   r   c                 óF   — |                       t          dgdg|¬¦  «         d S ©Nr$   rW   )rk   r&   rn   s     r   Útest_for_loop4zTestFlowControl.test_for_loop4  s'   € Ø�ŠÕ'¨"¨°¨t¸5ˆÑAÔAÐAÐAÐAr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r€   rr   rs   s    r   Útest_for_loop4_npmz"TestFlowControl.test_for_loop4_npm  ru   r   c                 óF   — |                       t          dgdg|¬¦  «         d S ©Néd   é2   rW   )rk   r)   rn   s     r   Útest_for_loop5zTestFlowControl.test_for_loop5  ó'   € Ø�ŠÕ'¨#¨°°¸EˆÑBÔBÐBÐBÐBr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r‡   rr   rs   s    r   Útest_for_loop5_npmz"TestFlowControl.test_for_loop5_npm  ru   r   c                 óF   — |                       t          dgdg|¬¦  «         d S r„   )rk   r+   rn   s     r   Útest_for_loop6zTestFlowControl.test_for_loop6  rˆ   r   c                 ó<   — |                       t          ¬¦  «         d S rq   )rŒ   rr   rs   s    r   Útest_for_loop6_npmz"TestFlowControl.test_for_loop6_npm  ru   r   c                 óF   — |                       t          dgdg|¬¦  «         d S )Né   r   rW   )rk   r-   rn   s     r   Útest_for_loop7zTestFlowControl.test_for_loop7"  s'   € Ø�ŠÕ'¨!¨¨q¨c¸ˆÑ?Ô?Ð?Ð?Ð?r   c                 ó<   — |                       t          ¬¦  «         d S rq   )r‘   rr   rs   s    r   Útest_for_loop7_npmz"TestFlowControl.test_for_loop7_npm%  ru   r   c                 óJ   — |                       t          ddgg d¢|¬¦  «         d S ©Nr   r%   )r   r1   r$   rW   )rk   r/   rn   s     r   Útest_for_loop8zTestFlowControl.test_for_loop8(  ó+   € Ø�ŠÕ'¨!¨Q¨°°°À5ˆÑIÔIÐIÐIÐIr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r–   rr   rs   s    r   Útest_for_loop8_npmz"TestFlowControl.test_for_loop8_npm+  ru   r   c                 óJ   — |                       t          ddgg d¢|¬¦  «         d S r•   )rk   r3   rn   s     r   Útest_for_loop9zTestFlowControl.test_for_loop9.  r—   r   c                 ó<   — |                       t          ¬¦  «         d S rq   )r›   rr   rs   s    r   Útest_for_loop9_npmz"TestFlowControl.test_for_loop9_npm1  ru   r   c                 óH   — |                       t          dgddg|¬¦  «         d S )Nr�   r1   é   rW   )rk   r5   rn   s     r   Útest_for_loop10zTestFlowControl.test_for_loop104  s)   € Ø�ŠÕ(¨1¨#°°1¨v¸UˆÑCÔCÐCÐCÐCr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r    rr   rs   s    r   Útest_for_loop10_npmz#TestFlowControl.test_for_loop10_npm7  s   € Ø×Ò¥>ÐÑ2Ô2Ð2Ð2Ð2r   c                 óF   — |                       t          dgdg|¬¦  «         d S ©Nr$   r   rW   )rk   r7   rn   s     r   Útest_while_loop1z TestFlowControl.test_while_loop1:  ó'   € Ø�ŠÕ)¨B¨4°!°¸EˆÑBÔBÐBÐBÐBr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r¥   rr   rs   s    r   Útest_while_loop1_npmz$TestFlowControl.test_while_loop1_npm=  ó   € Ø×Ò¥NÐÑ3Ô3Ð3Ð3Ð3r   c                 óF   — |                       t          dgdg|¬¦  «         d S r¤   )rk   r:   rn   s     r   Útest_while_loop2z TestFlowControl.test_while_loop2@  r¦   r   c                 ó<   — |                       t          ¬¦  «         d S rq   )r«   rr   rs   s    r   Útest_while_loop2_npmz$TestFlowControl.test_while_loop2_npmC  r©   r   c                 óF   — |                       t          dgdg|¬¦  «         d S r   )rk   r<   rn   s     r   Útest_while_loop3z TestFlowControl.test_while_loop3F  s'   € Ø�ŠÕ)¨B¨4°"°¸UˆÑCÔCÐCÐCÐCr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r¯   rr   rs   s    r   Útest_while_loop3_npmz$TestFlowControl.test_while_loop3_npmI  r©   r   c                 óF   — |                       t          dgdg|¬¦  «         d S r¤   )rk   r>   rn   s     r   Útest_while_loop4z TestFlowControl.test_while_loop4L  r¦   r   c                 ó<   — |                       t          ¬¦  «         d S rq   )r³   rr   rs   s    r   Útest_while_loop4_npmz$TestFlowControl.test_while_loop4_npmO  r©   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S )N)r   r�   r$   rW   )rk   r@   rn   s     r   Útest_while_loop5z TestFlowControl.test_while_loop5R  s+   € Ø�ŠÕ)¨:¨:¨:°z°z°zÈˆÑOÔOÐOÐOÐOr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r·   rr   rs   s    r   Útest_while_loop5_npmz$TestFlowControl.test_while_loop5_npmU  r©   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S ©N)r   r   r%   rW   )rk   rC   rn   s     r   Útest_ifelse1zTestFlowControl.test_ifelse1X  ó*   € Ø�Š•o z z z°:°:°:ÀUˆÑKÔKÐKÐKÐKr   c                 ó<   — |                       t          ¬¦  «         d S rq   )r¼   rr   rs   s    r   Útest_ifelse1_npmz TestFlowControl.test_ifelse1_npm[  ó   € Ø×Ò¥ÐÑ/Ô/Ð/Ð/Ð/r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r»   )rk   rF   rn   s     r   Útest_ifelse2zTestFlowControl.test_ifelse2^  r½   r   c                 ó<   — |                       t          ¬¦  «         d S rq   )rÂ   rr   rs   s    r   Útest_ifelse2_npmz TestFlowControl.test_ifelse2_npma  rÀ   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r»   )rk   rH   rn   s     r   Útest_ifelse3zTestFlowControl.test_ifelse3d  r½   r   c                 ó<   — |                       t          ¬¦  «         d S rq   )rÆ   rr   rs   s    r   Útest_ifelse3_npmz TestFlowControl.test_ifelse3_npmg  rÀ   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r»   )rk   rJ   rn   s     r   Útest_ifelse4zTestFlowControl.test_ifelse4j  r½   r   c                 ó<   — |                       t          ¬¦  «         d S rq   )rÊ   rr   rs   s    r   Útest_ifelse4_npmz TestFlowControl.test_ifelse4_npmm  rÀ   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r»   )rk   rL   rn   s     r   Útest_ternary_ifelse1z$TestFlowControl.test_ternary_ifelse1p  s9   € Ø�ŠÕ-¨z¨z¨z¸:¸:¸:Ø!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S rq   )rÎ   rr   rs   s    r   Útest_ternary_ifelse1_npmz(TestFlowControl.test_ternary_ifelse1_npmt  s   € Ø×!Ò!­Ð!Ñ7Ô7Ð7Ð7Ð7r   c                 óF   — |                       t          dgdg|¬¦  «         d S r¤   )rk   rO   rn   s     r   Útest_double_infinite_loopz)TestFlowControl.test_double_infinite_loopw  s5   € Ø�ŠÕ*¨R¨D°1°#Ø!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S rq   )rÒ   rr   rs   s    r   Útest_double_infinite_loop_npmz-TestFlowControl.test_double_infinite_loop_npm{  s   € Ø×&Ò&­^Ð&Ñ<Ô<Ð<Ð<Ð<r   N)/Ú__name__Ú
__module__Ú__qualname__Úenable_pyobj_flagsrk   ro   rt   rw   ry   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Â   rÄ   rÆ   rÈ   rÊ   rÌ   rÎ   rÐ   rÒ   rÔ   r    r   r   rU   rU   Þ   sº  € € € € € ð *ð.ð .ð .ð .ð2 $6ð Ið Ið Ið Ið2ð 2ð 2ð $6ð #ð #ð #ð #ð2ð 2ð 2ð $6ð #ð #ð #ð #ð2ð 2ð 2ð $6ð Bð Bð Bð Bð2ð 2ð 2ð $6ð Cð Cð Cð Cð2ð 2ð 2ð $6ð Cð Cð Cð Cð2ð 2ð 2ð $6ð @ð @ð @ð @ð2ð 2ð 2ð $6ð Jð Jð Jð Jð2ð 2ð 2ð $6ð Jð Jð Jð Jð2ð 2ð 2ð %7ð Dð Dð Dð Dð3ð 3ð 3ð &8ð Cð Cð Cð Cð4ð 4ð 4ð &8ð Cð Cð Cð Cð4ð 4ð 4ð &8ð Dð Dð Dð Dð4ð 4ð 4ð &8ð Cð Cð Cð Cð4ð 4ð 4ð &8ð Pð Pð Pð Pð4ð 4ð 4ð "4ð Lð Lð Lð Lð0ð 0ð 0ð "4ð Lð Lð Lð Lð0ð 0ð 0ð "4ð Lð Lð Lð Lð0ð 0ð 0ð "4ð Lð Lð Lð Lð0ð 0ð 0ð *<ð #ð #ð #ð #ð8ð 8ð 8ð /Að #ð #ð #ð #ð=ð =ð =ð =ð =r   rU   c                   ó¼   — e Zd ZdZd 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„ 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 )!ÚTestCFGraphz3
    Test the numba.controlflow.CFGraph class.
    r   c                 óÀ   — t          ¦   «         }|D ]}|                     |¦  «         Œ|                     ¦   «         D ] \  }}|D ]}|                     ||¦  «         ŒŒ!|S )zG
        Build a CFGraph class from a dict of adjacency lists.
        )r   Úadd_nodeÚitemsÚadd_edge)r`   ÚdrZ   ÚgÚnodeÚdestsÚdests          r   Úfrom_adj_listzTestCFGraph.from_adj_list„  s|   € õ ‰IŒIˆàð 	ð 	ˆDØ�JŠJ�tÑÔÐÐØŸ7š7™9œ9ð 	'ð 	'‰KˆD�%Øð 'ð '�Ø—
’
˜4 Ñ&Ô&Ð&Ð&ð'àˆr   c                 ó”   — |                       ddgdgdgg dœ¦  «        }|                     d¦  «         |                     ¦   «          |S )z“
        A simple CFG corresponding to the following code structure:

            c = (... if ... else ...) + ...
            return b + c
        é   é   é   ©r   rç   ræ   rè   r   ©rä   Úset_entry_pointÚprocess©r`   rà   s     r   Ú	loopless1zTestCFGraph.loopless1‘  sQ   € ð ×Ò B¨ 8°"°¸B¸4ÀRÐHÐHÑIÔIˆØ	×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØˆr   c                 ó¦   — |                       ddgdgdgg ddgddgdgg dœ¦  «        }|                     d¦  «         |                     ¦   «          |S )	zc
        Same as loopless1(), but with added dead blocks (some of them
        in a loop).
        ræ   rç   rè   r   é[   é]   é\   )r   rç   ræ   rè   rð   rò   rñ   é^   rê   rí   s     r   Úloopless1_dead_nodesz TestCFGraph.loopless1_dead_nodes�  su   € ð
 ×ÒØ�R�Ø�Ø�ØØ�a�Ø�b�Ø�Øðð ñ	ô 	ˆð 	
×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØˆr   c           	      óœ   — |                       ddgdgdgddgg g dœ¦  «        }|                     d¦  «         |                     ¦   «          |S )aA  
        A loopless CFG corresponding to the following code structure:

            c = (... if ... else ...) + ...
            if c:
                return ...
            else:
                return ...

        Note there are two exit points, and the entry point has been
        changed to a non-zero value.
        ræ   rç   rè   é*   é"   ©éc   rç   ræ   rè   r÷   rö   rù   rê   rí   s     r   Ú	loopless2zTestCFGraph.loopless2°  s`   € ð ×ÒØ�b� ˜t¨"¨°B¸°8ÀÈÐLÐLñNô Nˆà	×Ò˜"ÑÔÐØ	�	Š	‰ŒˆØˆr   c                 ó  — |                       i ddg“dddg“ddg“ddg“dddg“dd	d
g“d	dg“d
dg“ddg“ddg“ddg“ddg“dddg“dddg“dg “ddg“dg “¦  «        }|                     d¦  «         |                     ¦   «          |S )a^  
        A CFG with multiple nested loops:

            for y in b:
                for x in a:
                    # This loop has two back edges
                    if b:
                        continue
                    else:
                        continue
            for z in c:
                if z:
                    return ...
        r   rŸ   r$   é<   é   é   é8   é   é    é,   é9   é=   éD   éW   éG   éP   éX   rê   rí   s     r   Úmultiple_loopszTestCFGraph.multiple_loopsÃ  s3  € ð ×Òð  (  A 3ð  (Ø ! B¨ 8ð (à " R Dð (ð !# R Dð (ð !# R¨ Hð	 (ð
 !# R¨ Hð (ð !# R Dð (ð !# R Dð (ð !# R Dð (ð !# Q Cð (ð !# R Dð (ð !# R Dð (ð !# R¨ Hð (ð !# R¨ Hð (ð !# Bð (ð !# R Dð (ð  !# Bð! (ñ !ô !ˆð$ 	
×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØˆr   c                 ó¦   — |                       dgddgddgg ddgdgdgg dœ¦  «        }|                     d	¦  «         |                     ¦   «          |S )
a  
        A CFG with three loop exits, one of which is also a function
        exit point, and another function exit point:

            for x in a:
                if a:
                    return b
                elif b:
                    break
            return c
        rŸ   r$   é$   é   r   é   é%   ©r   rŸ   r$   r  r   r  r  r  r   rê   rí   s     r   Úmultiple_exitszTestCFGraph.multiple_exitsè  su   € ð ×ÒØ�Ø�R�Ø�b�ØØ�a�Ø�Ø�Øðð ñ	ô 	ˆð 	
×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØˆr   c           	      óž   — |                       ddgg dgddgdgdgdœ¦  «        }|                     d¦  «         |                     ¦   «          |S )zç
        A CFG with a infinite loop and an alternate exit point:

            if c:
                return
            while True:
                if a:
                    ...
                else:
                    ...
        r$   é   rý   é   r  ©r   r  r$   rý   r  r  r   rê   rí   s     r   Úinfinite_loop1zTestCFGraph.infinite_loop1  sb   € ð ×ÒØ�Q�˜B R D¨r°2¨h¸R¸DÀrÀdÐKÐKñMô Mˆà	×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØˆr   c                 ó–   — |                       dgddgdgdgdœ¦  «        }|                     d¦  «         |                     ¦   «          |S )z§
        A CFG with no exit point at all:

            while True:
                if a:
                    ...
                else:
                    ...
        rE   é   é	   ©r   rE   r  r  r   rê   rí   s     r   Úinfinite_loop2zTestCFGraph.infinite_loop2  sS   € ð ×Ò A 3¨B°¨7¸°sÀÀÐDÐDÑEÔEˆØ	×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØˆr   c                 óæ  — |                       ¦   «         }|                      t          |                     d¦  «        ¦  «        ddg¦  «         |                      t          |                     d¦  «        ¦  «        g ¦  «         |                      t          |                     d¦  «        ¦  «        g ¦  «         |                      t          |                     d¦  «        ¦  «        ddg¦  «         d S )Nr   )rç   N)ræ   Nrè   )rî   r^   ÚsortedÚ
successorsÚpredecessorsrí   s     r   Útest_simple_propertiesz"TestCFGraph.test_simple_properties#  sÇ   € Ø�NŠNÑÔˆØ×Ò� §¢¨Q¡¤Ñ0Ô0°:¸zÐ2JÑKÔKÐKØ×Ò� §¢¨RÑ 0Ô 0Ñ1Ô1°2Ñ6Ô6Ð6Ø×Ò� §¢¨qÑ 1Ô 1Ñ2Ô2°BÑ7Ô7Ð7Ø×Ò� §¢¨rÑ 2Ô 2Ñ3Ô3°jÀ*Ð5MÑNÔNÐNÐNÐNr   c                 ó  — |                       ¦   «         }|                      t          |                     ¦   «         ¦  «        dg¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        dg¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        ddg¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        ddg¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        dg¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        g ¦  «         |  	                    ¦   «         }|                      t          |                     ¦   «         ¦  «        ddg¦  «         d S )	Nrè   r÷   rö   r  r	  r  r  r  )
rî   r^   r  Úexit_pointsrô   rú   r
  r  r  r  rí   s     r   Útest_exit_pointszTestCFGraph.test_exit_points*  s—  € Ø�NŠNÑÔˆØ×Ò� §¢¡¤Ñ0Ô0°2°$Ñ7Ô7Ð7Ø×%Ò%Ñ'Ô'ˆØ×Ò� §¢¡¤Ñ0Ô0°2°$Ñ7Ô7Ð7Ø�NŠNÑÔˆØ×Ò� §¢¡¤Ñ0Ô0°2°r°(Ñ;Ô;Ð;Ø×ÒÑ!Ô!ˆØ×Ò� §¢¡¤Ñ0Ô0°2°r°(Ñ;Ô;Ð;Ø×ÒÑ!Ô!ˆØ×Ò� §¢¡¤Ñ0Ô0°1°#Ñ6Ô6Ð6Ø×ÒÑ!Ô!ˆØ×Ò� §¢¡¤Ñ0Ô0°"Ñ5Ô5Ð5Ø×ÒÑ!Ô!ˆØ×Ò� §¢¡¤Ñ0Ô0°2°r°(Ñ;Ô;Ð;Ð;Ð;r   c                 óÀ  — |                       ¦   «         }|                      t          |                     ¦   «         ¦  «        d¦  «         |                      t	          |                     ¦   «         ¦  «        g d¢¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        d¦  «         |                      t	          |                     ¦   «         ¦  «        g d¢¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        d¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        d¦  «         |  	                    ¦   «         }|                      t          |                     ¦   «         ¦  «        d¦  «         |  
                    ¦   «         }|                      t	          |                     ¦   «         ¦  «        g d¢¦  «         |                      t	          |                     ¦   «         ¦  «        g d¢¦  «         d S )Nr   ré   ©rç   ræ   rè   r÷   rö   rù   )rð   rò   rñ   ró   )rî   r^   ÚlenÚ
dead_nodesr  Únodesrú   r
  r  r  rô   rí   s     r   Útest_dead_nodeszTestCFGraph.test_dead_nodes:  sô  € Ø�NŠNÑÔˆØ×Ò�˜QŸ\š\™^œ^Ñ,Ô,¨aÑ0Ô0Ð0Ø×Ò� §¢¡	¤	Ñ*Ô*Ø(˜˜ñ	*ô 	*ð 	*à�NŠNÑÔˆØ×Ò�˜QŸ\š\™^œ^Ñ,Ô,¨aÑ0Ô0Ð0Ø×Ò� §¢¡	¤	Ñ*Ô*Ø1Ð1Ð1ñ	3ô 	3ð 	3à×ÒÑ!Ô!ˆØ×Ò�˜QŸ\š\™^œ^Ñ,Ô,¨aÑ0Ô0Ð0Ø×ÒÑ!Ô!ˆØ×Ò�˜QŸ\š\™^œ^Ñ,Ô,¨aÑ0Ô0Ð0Ø×ÒÑ!Ô!ˆØ×Ò�˜QŸ\š\™^œ^Ñ,Ô,¨aÑ0Ô0Ð0à×%Ò%Ñ'Ô'ˆØ×Ò� §¢¡¤Ñ/Ô/Ø)Ð)Ð)ñ	+ô 	+ð 	+à×Ò� §¢¡	¤	Ñ*Ô*Ø(˜˜ñ	*ô 	*ð 	*ð 	*ð 	*r   c                 óÊ  — |                       ¦   «         }|                     d¦  «        }|                      t          |¦  «        g ¦  «         |                     d¦  «        }|                      t          |¦  «        g ¦  «         |                     d¦  «        }|                      t          |¦  «        ddg¦  «         |                     d¦  «        }|                      t          |¦  «        g d¢¦  «         |                      ¦   «         }|                     d¦  «        }|                      t          |¦  «        g ¦  «         |                     d¦  «        }|                      t          |¦  «        g ¦  «         |                     d¦  «        }|                      t          |¦  «        ddg¦  «         |                     d	¦  «        }|                      t          |¦  «        g d
¢¦  «         |                     d¦  «        }|                      t          |¦  «        g ¦  «         |                     d¦  «        }|                      t          |¦  «        g d¢¦  «         d S )Nr÷   rö   rè   rù   )rç   ræ   rè   r÷   rö   r  r  rý   r$   ©rý   r  r  r  r   )r  r$   rý   r  r  )rú   Údescendentsr^   r  r  )r`   rà   rß   s      r   Útest_descendentszTestCFGraph.test_descendentsP  s  € Ø�NŠNÑÔˆØ�MŠM˜"ÑÔˆØ×Ò� ™œ BÑ'Ô'Ð'Ø�MŠM˜"ÑÔˆØ×Ò� ™œ BÑ'Ô'Ð'Ø�MŠM˜"ÑÔˆØ×Ò� ™œ R¨ HÑ-Ô-Ð-Ø�MŠM˜"ÑÔˆØ×Ò� ™œÐ$8Ð$8Ð$8Ñ9Ô9Ð9Ø×ÒÑ!Ô!ˆØ�MŠM˜"ÑÔˆØ×Ò� ™œ BÑ'Ô'Ð'Ø�MŠM˜"ÑÔˆØ×Ò� ™œ BÑ'Ô'Ð'Ø�MŠM˜"ÑÔˆØ×Ò� ™œ R¨ HÑ-Ô-Ð-Ø�MŠM˜"ÑÔˆØ×Ò� ™œ L L LÑ1Ô1Ð1Ø�MŠM˜!ÑÔˆØ×Ò� ™œ BÑ'Ô'Ð'Ø�MŠM˜!ÑÔˆØ×Ò� ™œÐ$7Ð$7Ð$7Ñ8Ô8Ð8Ð8Ð8r   c                 ó"  — |                       ¦   «         }|                      |                     ¦   «         g d¢g d¢f¦  «         |                      ¦   «         }|                      |                     ¦   «         g d¢g d¢f¦  «         |                      ¦   «         }|                      |                     ¦   «         g d¢g d¢f¦  «         |                      ¦   «         }|                      |                     ¦   «         g d¢g d¢g d	¢g d
¢f¦  «         d S )Nré   )r   ræ   rç   rè   )rù   ræ   rç   rè   r÷   rö   rø   r  )r   rE   r  r  r  )r   r  r$   rý   r  r  )r   r$   rý   r  r  r  )r   r$   rý   r  r  r  )rî   ÚassertInÚ
topo_orderrú   r  r  rí   s     r   Útest_topo_orderzTestCFGraph.test_topo_orderh  s3  € Ø�NŠNÑÔˆØ�Š�a—l’l‘n”nØ&��¨¨¨Ð8ñ	:ô 	:ð 	:à�NŠNÑÔˆØ�Š�a—l’l‘n”nØ/Ð/Ð/Ð1IÐ1IÐ1IÐJñ	Lô 	Lð 	Là×ÒÑ!Ô!ˆØ�Š�a—l’l‘n”nØ$�}�} m m mÐ4ñ	6ô 	6ð 	6à×ÒÑ!Ô!ˆØ�Š�a—l’l‘n”nØ-Ð-Ð-Ð/EÐ/EÐ/EØ-Ð-Ð-Ð/EÐ/EÐ/EðGñ	Hô 	Hð 	Hð 	Hð 	Hr   c                 óÞ   ‡ ‡— ˆˆ fd„}‰                       ¦   «         Š |g d¢g d¢f¦  «          |g d¢g d¢g d¢f¦  «         ‰                      ¦   «         Š |g d¢g d¢g d	¢g d
¢f¦  «         d S )Nc           
      ó*  •— ‰                      t          ‰                     | ¦  «        ¦  «        |¦  «         ‰                      t          ‰                     | d d d…         ¦  «        ¦  «        |¦  «         ‰                      t          ‰                     | d¬¦  «        ¦  «        d d d…         |¦  «         ‰                      t          ‰                     | d d d…         d¬¦  «        ¦  «        d d d…         |¦  «         ‰j                             | ¦  «         ‰                      t          ‰                     | ¦  «        ¦  «        |¦  «         ‰                      t          ‰                     | d¬¦  «        ¦  «        d d d…         |¦  «         d S )Nr   T)Úreverse)r/  ÚlistÚ	topo_sortÚrandomÚshuffle)r(  Úexpectedrà   r`   s     €€r   Úcheck_topo_sortz3TestCFGraph.test_topo_sort.<locals>.check_topo_sortx  si  ø€ Ø�MŠM�$˜qŸ{š{¨5Ñ1Ô1Ñ2Ô2°HÑ=Ô=Ð=Ø�MŠM�$˜qŸ{š{¨5°°°2°¬;Ñ7Ô7Ñ8Ô8¸(ÑCÔCÐCØ�MŠM�$˜qŸ{š{¨5¸$˜{Ñ?Ô?Ñ@Ô@ÀÀÀ2ÀÔFØ"ñ$ô $ð $à�MŠM�$˜qŸ{š{¨5°°°2°¬;À˜{ÑEÔEÑFÔFÀtÀtÈÀtÔLØ"ñ$ô $ð $àŒK×Ò Ñ&Ô&Ð&Ø�MŠM�$˜qŸ{š{¨5Ñ1Ô1Ñ2Ô2°HÑ=Ô=Ð=Ø�MŠM�$˜qŸ{š{¨5¸$˜{Ñ?Ô?Ñ@Ô@ÀÀÀ2ÀÔFØ"ñ$ô $ð $ð $ð $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  )rŸ   r$   r  r  )rŸ   r  r$   r  )rú   r  )r`   r:  rà   s   ` @r   Útest_topo_sortzTestCFGraph.test_topo_sortw  sØ   øø€ ð
	$ð 
	$ð 
	$ð 
	$ð 
	$ð 
	$ð �NŠNÑÔˆØˆÐ(Ð(Ð(Ð+;Ð+;Ð+;Ð*=Ñ>Ô>Ð>àˆÐ(Ð(Ð(Ø)Ð)Ð)Ð+;Ð+;Ð+;Ð<ñ	>ô 	>ð 	>à×ÒÑ!Ô!ˆØˆ˜˜˜Ø(˜˜¨/¨/¨/¸?¸?¸?ÐKñ	Mô 	Mð 	Mð 	Mð 	Mr   c                 ó
  — |                       t          |¦  «        t          |¦  «        ¦  «         t          |¦  «        D ]B}|                       t          ||         ¦  «        t          ||         ¦  «        d|›�¦  «         ŒCd S )Nzmismatch for ©r^   r  )r`   Úgotr9  rá   s       r   Úcheck_dominatorszTestCFGraph.check_dominators�  s‰   € Ø×Ò� ™œ¥f¨XÑ&6Ô&6Ñ7Ô7Ð7Ý˜3‘K”Kð 	:ð 	:ˆDØ×Ò�V C¨¤IÑ.Ô.µ°xÀ´~Ñ0FÔ0FÐ0FØ26°$Ð8ñ:ô :ð :ð :ð	:ð 	:r   c                 óø  ‡ ‡— ˆˆ fd„}‰                       ¦   «         ‰                      ¦   «         fD ]M}|                     ¦   «         Š |ddg¦  «          |dddg¦  «          |dddg¦  «          |dddg¦  «         ŒN‰                      ¦   «         }|                     ¦   «         Š |ddg¦  «          |dddg¦  «          |dddg¦  «          |dddg¦  «          |dg d¢¦  «          |d	g d
¢¦  «         d S )Nc                 óZ   •— ‰                      t          ‰|          ¦  «        |¦  «         d S rQ   r=  ©rß   ÚlÚdomsr`   s     €€r   Úeq_z1TestCFGraph.test_dominators_loopless.<locals>.eq_”  ó)   ø€ Ø×Ò�V D¨¤G™_œ_¨aÑ0Ô0Ð0Ð0Ð0r   r   rç   ræ   rè   rù   r÷   )rè   r÷   rù   rö   )rè   rö   rù   )rî   rô   Ú
dominatorsrú   ©r`   rE  rà   rD  s   `  @r   Útest_dominators_looplessz$TestCFGraph.test_dominators_loopless“  sP  øø€ ð	1ð 	1ð 	1ð 	1ð 	1ð 	1à—.’.Ñ"Ô" D×$=Ò$=Ñ$?Ô$?Ð@ð 	ð 	ˆAØ—<’<‘>”>ˆDØˆC��A�3‰KŒKˆKØˆC��Q˜�GÑÔÐØˆC��Q˜�GÑÔÐØˆC��Q˜�GÑÔÐÐØ�NŠNÑÔˆØ�|Š|‰~Œ~ˆØˆˆB��‰ŒˆØˆˆB��R�ÑÔÐØˆˆB��R�ÑÔÐØˆˆB��R�ÑÔÐØˆˆB���ÑÔÐØˆˆB���ÑÔÐÐÐr   c                 óv  — |                       ¦   «         }|                     ¦   «         }|                      |dgddgg d¢g d¢g d¢g d¢g d¢g d¢d	œ¦  «         |                      ¦   «         }|                     ¦   «         }|                      |i ddg“dddg“d
g d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“d g d!¢“d"g d#¢“d$g d%¢“d&g d'¢“¦  «         |                      ¦   «         }|                     ¦   «         }|                      |dgdd(gdd
gg d)¢g d*¢g d+¢d,œ¦  «         d S )-Nr   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ý   )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   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  )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   r  r  r	  rŸ   rü   r  r  )r   r$   rý   )r   r$   r  rý   )r   r$   rý   r  r  )r  rG  r?  r
  r  ©r`   rà   rD  s      r   Útest_dominators_loopsz!TestCFGraph.test_dominators_loops¥  sY  € Ø×ÒÑ!Ô!ˆØ�|Š|‰~Œ~ˆØ×Ò˜dØ#$ #Ø#$ a &Ø#- : :Ø#1 > >Ø#1 > >Ø#5Ð#5Ð#5Ø#- : :Ø#- : :ð!ð !ñ		"ô 		"ð 		"ð ×ÒÑ!Ô!ˆØ�|Š|‰~Œ~ˆØ×Ò˜dð!˜q 1 #ð !Ø  1 a &ð!à! : : :ð!ð  " > > >ð!ð  "Ð#5Ð#5Ð#5ð	!ð
  "Ð#9Ð#9Ð#9ð!ð  "Ð#=Ð#=Ð#=ð!ð  "Ð#=Ð#=Ð#=ð!ð  "Ð#9Ð#9Ð#9ð!ð  "Ð#=Ð#=Ð#=ð!ð  " : : :ð!ð  " > > >ð!ð  "Ð#5Ð#5Ð#5ð!ð  "Ð#9Ð#9Ð#9ð!ð  "Ð#=Ð#=Ð#=ð!ð  "Ð#9Ð#9Ð#9ð!ð   "Ð#=Ð#=Ð#=ð!!ñ	"ô 	"ð 	"ð& ×ÒÑ!Ô!ˆØ�|Š|‰~Œ~ˆØ×Ò˜dØ#$ #Ø#$ a &Ø$% r 7Ø#. ; ;Ø#2 ? ?Ø#2 ? ?ð!ð !ñ	"ô 	"ð 	"ð 	"ð 	"r   c                 óô  ‡ ‡— ˆˆ fd„}‰                       ¦   «         ‰                      ¦   «         fD ]M}|                     ¦   «         Š |dddg¦  «          |dddg¦  «          |dddg¦  «          |ddg¦  «         ŒN‰                      ¦   «         }|                     ¦   «         Š |ddg¦  «          |ddg¦  «          |ddg¦  «          |dddg¦  «          |dddg¦  «          |dddg¦  «         d S )	Nc                 óZ   •— ‰                      t          ‰|          ¦  «        |¦  «         d S rQ   r=  rB  s     €€r   rE  z6TestCFGraph.test_post_dominators_loopless.<locals>.eq_Ó  rF  r   r   rè   rç   ræ   r÷   rö   rù   )rî   rô   Úpost_dominatorsrú   rH  s   `  @r   Útest_post_dominators_looplessz)TestCFGraph.test_post_dominators_looplessÒ  sJ  øø€ ð	1ð 	1ð 	1ð 	1ð 	1ð 	1à—.’.Ñ"Ô" D×$=Ò$=Ñ$?Ô$?Ð@ð 	ð 	ˆAØ×$Ò$Ñ&Ô&ˆDØˆC��A�r�7‰OŒOˆOØˆC��R˜�HÑÔÐØˆC��R˜�HÑÔÐØˆC��R�D‰MŒMˆMˆMØ�NŠNÑÔˆØ× Ò Ñ"Ô"ˆØˆˆB��‰ŒˆØˆˆB��‰ŒˆØˆˆB��‰ŒˆØˆˆB��R�ÑÔÐØˆˆB��R�ÑÔÐØˆˆB��R�ÑÔÐÐÐr   c                 óÈ  — |                       ¦   «         }|                     ¦   «         }|                      |ddgdgdgdgdgddgddgdgd	œ¦  «         |                      ¦   «         }|                     ¦   «         }|                      |i dg d
¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dddg“ddg“ddg“ddg“d d!d g“d!d!g“¦  «         d S )"Nr   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Ÿ   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  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  r  r  r  r  r	  )r  rO  r?  r
  rK  s      r   Útest_post_dominators_loopsz&TestCFGraph.test_post_dominators_loopsä  sß  € Ø×ÒÑ!Ô!ˆØ× Ò Ñ"Ô"ˆØ×Ò˜dØ#$ a &Ø#$ #Ø$& 4Ø$& 4Ø$& 4Ø$&¨ 8Ø$&¨ 8Ø$& 4ð!ð !ñ		"ô 		"ð 		"ð ×ÒÑ!Ô!ˆØ× Ò Ñ"Ô"ˆØ×Ò˜dð!˜qÐ"4Ð"4Ð"4ð !Ø  / / /ð!à!Ð#FÐ#FÐ#Fð!ð  "Ð#BÐ#BÐ#Bð!ð  "Ð#>Ð#>Ð#>ð	!ð
  "Ð#BÐ#BÐ#Bð!ð  "Ð#BÐ#BÐ#Bð!ð  "Ð#BÐ#BÐ#Bð!ð  "Ð#:Ð#:Ð#:ð!ð  "Ð#6Ð#6Ð#6ð!ð  " < < <ð!ð  " B¨ 8ð!ð  " B 4ð!ð  " B 4ð!ð  " B 4ð!ð  " B¨ 8ð!ð   " B 4ð!!ñ	"ô 	"ð 	"ð 	"ð 	"r   c           
      ó.  — |                       ¦   «         }|                     ¦   «         }|                      |dgdgddgdgdgdgdœ¦  «         |                      ¦   «         }|                     ¦   «         }|                      |ddgdgd	gd
gdœ¦  «         d S )Nr   r  r$   rý   r  r  r  rE   r  r  r  )r  rO  r?  r  rK  s      r   Ú#test_post_dominators_infinite_loopsz/TestCFGraph.test_post_dominators_infinite_loops  sÒ   € ð ×ÒÑ!Ô!ˆØ× Ò Ñ"Ô"ˆØ×Ò˜dØ#$ #Ø#$ #Ø$&¨ 8Ø$& 4Ø$& 4Ø$& 4ð!ð !ñ	"ô 	"ð 	"ð ×ÒÑ!Ô!ˆØ× Ò Ñ"Ô"ˆØ×Ò˜dØ#$ a &Ø#$ #Ø#$ #Ø$& 4ð!ð !ñ	"ô 	"ð 	"ð 	"ð 	"r   c                 óô  ‡ — ˆ fd„} |‰                       ¦   «         h d£t          ¦   «         t          ¦   «         t          ¦   «         dœ¦  «          |‰                      ¦   «         t          ¦   «         t          ¦   «         ddht          ¦   «         t          ¦   «         h d£dœ¦  «          |‰                      ¦   «         h d£t          ¦   «         t          ¦   «         t          ¦   «         dœ¦  «          |‰                      ¦   «         i ddh“dd	d
h“d
dh“ddh“dddh“ddh“dt          ¦   «         “ddh“dt          ¦   «         “d	dh“ddh“dddh“dddh“dt          ¦   «         “dt          ¦   «         “ddh“dt          ¦   «         “¦  «          |‰                      ¦   «         dhh d£t          ¦   «         ddhdht          ¦   «         t          ¦   «         t          ¦   «         dœ¦  «          |‰                      ¦   «         d	dht          ¦   «         dhddht          ¦   «         t          ¦   «         dœ¦  «          |‰                      ¦   «         dhd d!ht          ¦   «         t          ¦   «         d"œ¦  «         d S )#Nc                 ó\   •— |                       ¦   «         }‰                     ||¦  «         d S rQ   )Údominator_treer^   )Úgraphr9  Údomtreer`   s      €r   Úcheckz.TestCFGraph.test_dominator_tree.<locals>.check  s0   ø€ Ø×*Ò*Ñ,Ô,ˆGØ×Ò˜W hÑ/Ô/Ð/Ð/Ð/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  r  )r   rŸ   r  r$   r   r  r  r  r  r  r  rE   r  r  r  ©rî   Úsetrú   rô   r
  r  r  r  ©r`   rZ  s   ` r   Útest_dominator_treezTestCFGraph.test_dominator_tree  sõ  ø€ ð	0ð 	0ð 	0ð 	0ð 	0ð 	ˆˆd�nŠnÑÔØ�,�,¥C¡E¤E­s©u¬u½#¹%¼%Ð@Ð@ñ	Bô 	Bð 	Bàˆˆd�nŠnÑÔÝ‘5”5�c™eœe¨"¨b¨µs±u´uÅ#Á%Ä%Ø�<�<ð!ð !ñ	"ô 	"ð 	"ð 	ˆˆd×'Ò'Ñ)Ô)Ø�,�,¥C¡E¤E­s©u¬u½#¹%¼%Ð@Ð@ñ	Bô 	Bð 	Bàˆˆd×!Ò!Ñ#Ô#ð/ˆq�1�#ð /�q˜2˜r˜(ð / B¨¨ð /¨b°2°$ð /¸¸RÀ¸Hð /Ø�B�4ð/Ø�S™UœUð/Ø$&¨¨ð/Ø.0µ#±%´%ð/Ø9;¸b¸Tð/à�B�4ð/à˜b "˜Xð/à')¨B°¨8ð/à57½¹¼ð/ð •3‘5”5ð/ð ˜r˜dð/ð %'­©¬ð/ñ	0ô 	0ð 	0ð
 	ˆˆd×!Ò!Ñ#Ô#Ø�#˜,˜,˜,­C©E¬E¸¸B°xØ�4�S™UœU­©¬µ3±5´5ð:ð :ñ	;ô 	;ð 	;ð 	ˆˆd×!Ò!Ñ#Ô#Ø�q�'�c™eœe¨"¨°B¸°8ÅÁÄÝ‘5”5ðð ñ	ô 	ð 	ð 	ˆˆd×!Ò!Ñ#Ô#Ø�#˜2˜q˜'¥c¡e¤eµ±´Ð7Ð7ñ	9ô 	9ð 	9ð 	9ð 	9r   c                 óh  ‡ — ˆ fd„} |‰                       ¦   «         dddddœ¦  «          |‰                      ¦   «         dddddddœ¦  «          |‰                      ¦   «         dddddœ¦  «          |‰                      ¦   «         i dd“dd“dd“d	d“d
d	“dd
“dd“dd“dd
“dd“dd“dd“dd“dd“dd“dd“dd“¦  «          |‰                      ¦   «         dddddddddœ¦  «          |‰                      ¦   «         ddddd	d	dœ¦  «          |‰                      ¦   «         dddddœ¦  «         d S )Nc                 ó\   •— |                       ¦   «         }‰                     ||¦  «         d S rQ   )Úimmediate_dominatorsr^   )rX  r9  Úidomsr`   s      €r   rZ  z4TestCFGraph.test_immediate_dominators.<locals>.check8  s0   ø€ Ø×.Ò.Ñ0Ô0ˆEØ×Ò˜U HÑ-Ô-Ð-Ð-Ð-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  rE   r  )rî   rú   rô   r
  r  r  r  r]  s   ` r   Útest_immediate_dominatorsz%TestCFGraph.test_immediate_dominators7  s-  ø€ ð	.ð 	.ð 	.ð 	.ð 	.ð 	ˆˆd�nŠnÑÔØ˜  qÐ)Ð)ñ	+ô 	+ð 	+àˆˆd�nŠnÑÔØ˜2 2¨2°2¸2Ð>Ð>ñ	@ô 	@ð 	@àˆˆd×'Ò'Ñ)Ô)Ø˜  qÐ)Ð)ñ	+ô 	+ð 	+àˆˆd×!Ò!Ñ#Ô#ð7ˆq�!ð 7�Q˜ð 7˜2˜qð 7 " bð 7¨"¨bð 7°"°bð 7Ø�2ð7Ø˜2ð7Ø! 2ð7Ø')¨2ð7Ø/1°1ð7Ø68¸"ð7à�2ð7à˜2ð7à! 2ð7à')¨2ð7à/1°2ð7ñ	8ô 	8ð 	8ð 	ˆˆd×!Ò!Ñ#Ô#Ø�q˜a R¨R°R¸QÀAÐFÐFñ	Hô 	Hð 	Hàˆˆd×!Ò!Ñ#Ô#Ø˜˜q b¨b°bÐ9Ð9ñ	;ô 	;ð 	;àˆˆd×!Ò!Ñ#Ô#Ø˜˜a QÐ'Ð'ñ	)ô 	)ð 	)ð 	)ð 	)r   c                 óž  ‡ — ˆ fd„} |‰                       ¦   «         t          ¦   «         dhdht          ¦   «         dœ¦  «          |‰                      ¦   «         dhdht          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         dœ¦  «          |‰                      ¦   «         t          ¦   «         dhdht          ¦   «         dœ¦  «          |‰                      ¦   «         i dt          ¦   «         “ddh“ddh“ddh“d	d	dh“d
d	h“dd	h“dd	h“ddh“ddh“dt          ¦   «         “dt          ¦   «         “ddh“ddh“dt          ¦   «         “dt          ¦   «         “dt          ¦   «         “¦  «          |‰                      ¦   «         t          ¦   «         dhddht          ¦   «         ddhdhdht          ¦   «         dœ¦  «          |‰                      ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         dhdhdhdœ¦  «          |‰                      ¦   «         t          ¦   «         dhdhdhdœ¦  «         d S )Nc                 ó\   •— |                       ¦   «         }‰                     ||¦  «         d S rQ   )Údominance_frontierr^   )rX  r9  Údfr`   s      €r   rZ  z2TestCFGraph.test_dominance_frontier.<locals>.checkN  s0   ø€ Ø×)Ò)Ñ+Ô+ˆBØ×Ò˜R Ñ*Ô*Ð*Ð*Ð*r   rè   ré   rc  r   rŸ   r$   rý   rþ   r   r  r  rÿ   r  rü   r  r  r  r  r  r	  r  r  r  rE   r  r[  r]  s   ` r   Útest_dominance_frontierz#TestCFGraph.test_dominance_frontierM  sÛ  ø€ ð	+ð 	+ð 	+ð 	+ð 	+ð 	ˆˆd�nŠnÑÔÝ‘%”%˜b˜T¨ tµ±´Ð7Ð7ñ	9ô 	9ð 	9àˆˆd�nŠnÑÔØ�4˜b˜T¥s¡u¤uµ#±%´%½S¹U¼UÍÉÌÐNÐNñ	Pô 	Pð 	Pàˆˆd×'Ò'Ñ)Ô)Ý‘%”%˜b˜T¨ tµ±´Ð7Ð7ñ	9ô 	9ð 	9àˆˆd×!Ò!Ñ#Ô#ðDˆq•#‘%”%ð D˜˜Q˜Cð D  a Sð D¨"¨q¨cð D°2¸¸A°wð DÀÀRÀDð DØ�B�4ðDØ˜b˜TðDØ#%¨ sðDØ,.°°ðDØ57½¹¼ðDØ@BÅCÁEÄEðDà�B�4ðDà˜b˜TðDà#%¥s¡u¤uðDà.0µ#±%´%ðDà9;½S¹U¼UðDñ	Eô 	Eð 	Eð 	ˆˆd×!Ò!Ñ#Ô#Ý‘%”%˜Q˜C b¨! Wµ#±%´%Ø˜�7  ¨2¨$µC±E´Eð;ð ;ñ	<ô 	<ð 	<ð 	ˆˆd×!Ò!Ñ#Ô#Ý‘%”%�C™EœE¥s¡u¤u°2°$¸R¸DÀrÀdÐKÐKñ	Mô 	Mð 	Màˆˆd×!Ò!Ñ#Ô#Ý‘%”%˜Q˜C Q C¨a¨SÐ1Ð1ñ	3ô 	3ð 	3ð 	3ð 	3r   c                 ó`  — |                       ¦   «         |                      ¦   «         fD ]9}|                      t          |                     ¦   «         ¦  «        ddg¦  «         Œ:|                      ¦   «         }|                      t          |                     ¦   «         ¦  «        ddg¦  «         d S )Nr   rè   rù   )rî   rô   r^   r  Úbackbonerú   rí   s     r   Útest_backbone_looplessz"TestCFGraph.test_backbone_looplessd  s˜   € Ø—.’.Ñ"Ô" D×$=Ò$=Ñ$?Ô$?Ð@ð 	<ð 	<ˆAØ×Ò�V A§J¢J¡L¤LÑ1Ô1°A°r°7Ñ;Ô;Ð;Ð;Ø�NŠNÑÔˆØ×Ò� §
¢
¡¤Ñ-Ô-°°B¨xÑ8Ô8Ð8Ð8Ð8r   c                 óÆ  — |                       ¦   «         }|                      t          |                     ¦   «         ¦  «        g d¢¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        dg¦  «         |                      ¦   «         }|                      t          |                     ¦   «         ¦  «        ddg¦  «         d S )N)r   rŸ   rü   r  r  r   rE   )r
  r^   r  rk  r  r  rí   s     r   Útest_backbone_loopszTestCFGraph.test_backbone_loopsj  sº   € Ø×ÒÑ!Ô!ˆØ×Ò� §
¢
¡¤Ñ-Ô-Ð/AÐ/AÐ/AÑBÔBÐBØ×ÒÑ!Ô!ˆØ×Ò� §
¢
¡¤Ñ-Ô-°¨sÑ3Ô3Ð3Ø×ÒÑ!Ô!ˆØ×Ò� §
¢
¡¤Ñ-Ô-°°1¨vÑ6Ô6Ð6Ð6Ð6r   c                 ó0  — |                       ¦   «         |                      ¦   «         |                      ¦   «         fD ]7}|                      t	          |                     ¦   «         ¦  «        d¦  «         Œ8|                      ¦   «         }|                      t          |                     ¦   «         ¦  «        g d¢¦  «         |                     ¦   «         d         }|                     ¦   «         d         }|                     ¦   «         d         }|                      |j        d¦  «         |                      t          |j	        ¦  «        dg¦  «         |                      t          |j
        ¦  «        dg¦  «         |                      t          |j        ¦  «        g d¢¦  «         |                      |j        d¦  «         |                      t          |j	        ¦  «        dg¦  «         |                      t          |j
        ¦  «        d	g¦  «         |                      t          |j        ¦  «        g d
¢¦  «         |                      |j        d¦  «         |                      t          |j	        ¦  «        dg¦  «         |                      t          |j
        ¦  «        ddg¦  «         |                      t          |j        ¦  «        ddg¦  «         dD ]+}|                      |                     |¦  «        g ¦  «         Œ,dD ],}|                      |                     |¦  «        |g¦  «         Œ-d
D ]-}|                      |                     |¦  «        ||g¦  «         Œ.dD ],}|                      |                     |¦  «        |g¦  «         Œ-|                      ¦   «         }|                      t          |                     ¦   «         ¦  «        dg¦  «         |                     ¦   «         d         }|                      |j        d¦  «         |                      t          |j	        ¦  «        dg¦  «         |                      t          |j
        ¦  «        g ¦  «         |                      t          |j        ¦  «        g d¢¦  «         dD ]+}|                      |                     |¦  «        g ¦  «         Œ,dD ],}|                      |                     |¦  «        |g¦  «         Œ-|                      ¦   «         }|                      t          |                     ¦   «         ¦  «        dg¦  «         |                     ¦   «         d         }|                      |j        d¦  «         |                      t          |j	        ¦  «        dg¦  «         |                      t          |j
        ¦  «        g ¦  «         |                      t          |j        ¦  «        g d¢¦  «         dD ]+}|                      |                     |¦  «        g ¦  «         Œ,dD ],}|                      |                     |¦  «        |g¦  «         Œ-|                      ¦   «         }|                      t          |                     ¦   «         ¦  «        dg¦  «         |                     ¦   «         d         }|                      |j        d¦  «         |                      t          |j	        ¦  «        dg¦  «         |                      t          |j
        ¦  «        g d¢¦  «         |                      t          |j        ¦  «        g d¢¦  «         dD ]+}|                      |                     |¦  «        g ¦  «         Œ,dD ],}|                      |                     |¦  «        |g¦  «         Œ-d S )Nr   )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  r  r  r	  )rŸ   r$   rý   rÿ   r  )r  r  r$   r+  )r   r  r$   rE   )rE   r  r  ©r   )r  r  r  )rŸ   r$   r   )r   r  r  r  )rî   rô   rú   r^   r&  Úloopsr
  r  ÚheaderÚentriesÚexitsÚbodyÚin_loopsr  r  r  )r`   rà   Úouter1Úinner1Úouter2rá   Úloops          r   Ú
test_loopszTestCFGraph.test_loopsr  sÝ  € Ø—.’.Ñ"Ô" D×$=Ò$=Ñ$?Ô$?Ø—.’.Ñ"Ô"ð$ð 	0ð 	0ˆAà×Ò�S §¢¡¤™^œ^¨QÑ/Ô/Ð/Ð/à×ÒÑ!Ô!ˆà×Ò� §¢¡	¤	Ñ*Ô*¨K¨K¨KÑ8Ô8Ð8Ø—’‘”˜1”ˆØ—’‘”˜2”ˆØ—’‘”˜2”ˆØ×Ò˜œ¨Ñ*Ô*Ð*Ø×Ò� ¤Ñ/Ô/°!°Ñ5Ô5Ð5Ø×Ò� ¤Ñ-Ô-°¨tÑ4Ô4Ð4Ø×Ò� ¤Ñ,Ô,Ø<Ð<Ð<ñ	>ô 	>ð 	>à×Ò˜œ¨Ñ+Ô+Ð+Ø×Ò� ¤Ñ/Ô/°"°Ñ6Ô6Ð6Ø×Ò� ¤Ñ-Ô-°¨tÑ4Ô4Ð4Ø×Ò� ¤Ñ,Ô,Ð.>Ð.>Ð.>Ñ?Ô?Ð?Ø×Ò˜œ¨Ñ+Ô+Ð+Ø×Ò� ¤Ñ/Ô/°"°Ñ6Ô6Ð6Ø×Ò� ¤Ñ-Ô-°°B¨xÑ8Ô8Ð8Ø×Ò� ¤Ñ,Ô,¨r°2¨hÑ7Ô7Ð7Ø+ð 	3ð 	3ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-¨rÑ2Ô2Ð2Ð2Ø'ð 	9ð 	9ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-°¨xÑ8Ô8Ð8Ð8Ø$ð 	Að 	AˆDØ×Ò˜QŸZšZ¨Ñ-Ô-°¸Ð/?Ñ@Ô@Ð@Ð@Øð 	9ð 	9ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-°¨xÑ8Ô8Ð8Ð8à×ÒÑ!Ô!ˆà×Ò� §¢¡	¤	Ñ*Ô*¨R¨DÑ1Ô1Ð1Ø�wŠw‰yŒy˜Œ}ˆØ×Ò˜œ bÑ)Ô)Ð)Ø×Ò� ¤Ñ-Ô-°¨tÑ4Ô4Ð4Ø×Ò� ¤
Ñ+Ô+¨RÑ0Ô0Ð0Ø×Ò� ¤	Ñ*Ô*¨L¨L¨LÑ9Ô9Ð9Øð 	3ð 	3ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-¨rÑ2Ô2Ð2Ð2Ø ð 	7ð 	7ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-°¨vÑ6Ô6Ð6Ð6à×ÒÑ!Ô!ˆà×Ò� §¢¡	¤	Ñ*Ô*¨Q¨CÑ0Ô0Ð0Ø�wŠw‰yŒy˜Œ|ˆØ×Ò˜œ aÑ(Ô(Ð(Ø×Ò� ¤Ñ-Ô-°¨sÑ3Ô3Ð3Ø×Ò� ¤
Ñ+Ô+¨RÑ0Ô0Ð0Ø×Ò� ¤	Ñ*Ô*¨J¨J¨JÑ7Ô7Ð7Øð 	3ð 	3ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-¨rÑ2Ô2Ð2Ð2Øð 	7ð 	7ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-°¨vÑ6Ô6Ð6Ð6à×ÒÑ!Ô!ˆà×Ò� §¢¡	¤	Ñ*Ô*¨Q¨CÑ0Ô0Ð0Ø�wŠw‰yŒy˜Œ|ˆØ×Ò˜œ aÑ(Ô(Ð(Ø×Ò� ¤Ñ-Ô-°¨sÑ3Ô3Ð3Ø×Ò� ¤
Ñ+Ô+¨\¨\¨\Ñ:Ô:Ð:Ø×Ò� ¤	Ñ*Ô*¨K¨K¨KÑ8Ô8Ð8Ø#ð 	3ð 	3ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-¨rÑ2Ô2Ð2Ð2Øð 	7ð 	7ˆDØ×Ò˜QŸZšZ¨Ñ-Ô-°¨vÑ6Ô6Ð6Ð6ð	7ð 	7r   c                 óZ  — |                       i dddh“dddh“dddh“dddh“ddh“dddh“ddd	h“d	d
h“dddh“dddh“dd
h“dddh“dddh“dd
h“dd
dh“dd
dh“dd
h“i d
ddh“ddh“dddh“ddh“dddh“ddh“dddh“ddh“dddh“ddh“ddh“dddh“dd h“dd h“d d!d"h“d!d"h“d"d#d$h“¥i d$d%d&h“d%d&h“d&d'd(h“d'd)d(h“d)t          ¦   «         “d(d*d+h“d+d*h“d*d,d-h“d-d.h“d.d/h“d/d0d1h“d1d2d3h“d3d4d5h“d4d2d5h“d5d2h“d2d/h“d0d6h“¥d#hd7hd8hd9d:hd;d<hd=d>hd;d>hd;hd8hd#ht          ¦   «         d?œ¥¦  «        }|                     d¦  «         |                     ¦   «          i }|                     |¬@¦  «        }|                      |dAdBh¦  «         |                      |dC         dD¦  «         d S )ENr   é&   é   é   é   rö   é@   r†   é:   é€   éH   éV   r  él   ró   éf   ét   é|   é²   é®   éÒ   éÎ   éø   éü   i  i  i(  iF  iJ  ir  iT  iv  i|  i~  é2  i†  iÈ  iÊ  i  i6  i$  iJ  i<  éÄ  iT  i`  éb  iÀ  il  éš  iv  i|  i†  éÂ  éÐ  éÒ  é0  éÜ  é
  éæ  éì  éö  )r”  r‘  r•  r–  r˜  rš  r›  rœ  r™  r—  r�  )Ústats)r“  r’  )r™  r–  Úiteration_counté›   )rä   r\  rë   rì   Ú_find_back_edgesr^   )r`   rà   r�  Ú
back_edgess       r   Útest_loop_dfs_pathologicalz&TestCFGraph.test_loop_dfs_pathologicalº  s*  € à×Òð ? 
Ø��Bˆxð? 
à��R�ð? 
ð ��R�ð? 
ð ��R�ð	? 
ð
 ��ð? 
ð ��R�ð? 
ð ��R�ð? 
ð ��ð? 
ð ��R�ð? 
ð ��R�ð? 
ð ��ð? 
ð ��b�	ð? 
ð ��c�
ð? 
ð �#�ð? 
ð �#�s�ð? 
ð  �#�s�ð!? 
ð" �#�ð#? 
ð ? 
ð$ �#�s�ð%? 
ð& �#�ð'? 
ð( �#�s�ð)? 
ð* �#�ð+? 
ð, �#�s�ð-? 
ð. �#�ð/? 
ð0 �#�s�ð1? 
ð2 �#�ð3? 
ð4 �#�s�ð5? 
ð6 �#�ð7? 
ð8 �#�ð9? 
ð: �#�s�ð;? 
ð< �#�ð=? 
ð> �#�ð?? 
ð@ �#�s�ðA? 
ðB �#�ðC? 
ðD �#�s�ðE? 
ð ? 
ð ? 
ðF �#�s�ðG? 
ðH �#�ðI? 
ðJ �#�s�ðK? 
ðL �#�s�ðM? 
ðN •‘”ðO? 
ðP �#�s�ðQ? 
ðR �#�ðS? 
ðT �#�s�ðU? 
ðV �#�ðW? 
ðX �#�ðY? 
ðZ �#�s�ð[? 
ð\ �#�s�ð]? 
ð^ �#�s�ð_? 
ð` �#�s�ða? 
ðb �#�ðc? 
ðd �#�ðe? 
ðf �#�ðg? 
ð ? 
ðh �Ø�Ø�Ø�s�Ø�s�Ø�s�Ø�s�Ø�Ø�Ø�Ý‘”ð}? 
ð ? 
ð ? 
ñ ?ô ?ˆð@ 	
×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØˆà×'Ò'¨eÐ'Ñ4Ô4ˆ
Ø×Ò˜ j°*Ð%=Ñ>Ô>Ð>Ø×Ò˜Ð0Ô1°3Ñ7Ô7Ð7Ð7Ð7r   c                 ó°  ‡ — ˆ fd„} |¦   «         } |¦   «         }‰                       ||¦  «         ‰                      ddgdgg dgdœ¦  «        }|                     d¦  «         |                     ¦   «          ‰                       ||¦  «          |¦   «         }|                     d¦  «         |                     ¦   «          ‰                      ||¦  «         ‰                      ddgdgdgdgg dœ¦  «        }|                     d¦  «         |                     ¦   «          ‰                      ||¦  «         ‰                      ddgdgg d	œ¦  «        }|                     d¦  «         |                     ¦   «          ‰                      ddgdgg d	œ¦  «        }|                     d¦  «         |                     ¦   «          ‰                      ||¦  «         d S )
Nc                  ó–   •— ‰                      ddgdgdgg dœ¦  «        } |                      d¦  «         |                      ¦   «          | S )Nræ   rç   rè   ré   r   rê   )rà   r`   s    €r   Úget_newz(TestCFGraph.test_equals.<locals>.get_new  sP   ø€ Ø×"Ò"¨¨B x°b°TÀ¸tÈÐ#LÐ#LÑMÔMˆAØ×Ò˜aÑ Ô Ð Ø�IŠI‰KŒKˆKØˆHr   rç   ræ   rè   )r   ræ   rè   rç   r   r  )r   rç   ræ   rè   r  )r   rç   ræ   )r^   rä   rë   rì   ÚassertNotEqual)r`   r¥  r   r   rà   r2   Úas   `      r   Útest_equalszTestCFGraph.test_equals  s  ø€ ð	ð 	ð 	ð 	ð 	ð ˆG‰IŒIˆØˆG‰IŒIˆð 	×Ò˜˜AÑÔÐð ×Ò B¨ 8°"°¸2ÀBÀ4ÐHÐHÑIÔIˆØ	×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØ×Ò˜˜AÑÔÐð ˆG‰IŒIˆØ	×Ò˜"ÑÔÐØ	�	Š	‰ŒˆØ×Ò˜A˜qÑ!Ô!Ð!ð ×Ò B¨ 8°"°¸B¸4ÀbÀTØ$&ð (ð  (ñ )ô )ˆà	×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØ×Ò˜A˜qÑ!Ô!Ð!ð ×Ò B¨ 8°!°¸"Ð=Ð=Ñ>Ô>ˆØ	×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØ×Ò B¨ 8°"°¸2Ð>Ð>Ñ?Ô?ˆØ	×Ò˜!ÑÔÐØ	�	Š	‰ŒˆØ×Ò˜A˜qÑ!Ô!Ð!Ð!Ð!r   Nrp  ) rÕ   rÖ   r×   Ú__doc__rä   rî   rô   rú   r
  r  r  r  r   r#  r)  r-  r1  r;  r?  rI  rL  rP  rR  rT  r^  rd  ri  rl  rn  r{  r¢  r¨  r    r   r   rÚ   rÚ     sÛ  € € € € € ðð ðð ð ð ð
ð 
ð 
ðð ð ð&ð ð ð&#ð #ð #ðJð ð ð4ð ð ð$ð ð ðOð Oð Oð<ð <ð <ð *ð *ð *ð,9ð 9ð 9ð0Hð Hð HðMð Mð Mð,:ð :ð :ðð ð ð$+"ð +"ð +"ðZð ð ð$!"ð !"ð !"ðF"ð "ð "ð,9ð 9ð 9ð4)ð )ð )ð,3ð 3ð 3ð.9ð 9ð 9ð7ð 7ð 7ðF7ð F7ð F7ðPH8ð H8ð H8ðT("ð ("ð ("ð ("ð ("r   rÚ   c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTestRealCodeDomFronta)  Test IDOM and DOMFRONT computation on real python bytecode.
    Note: there will be less testing on IDOM (esp in loop) because of
    the extra blocks inserted by the interpreter.  But, testing on DOMFRONT
    (which depends on IDOM) is easier.

    Testing is done by associating names to basicblock by using globals of
    the pattern "SET_BLOCK_<name>", which are scanned by
    `.get_cfa_and_namedblocks` into *namedblocks* dictionary.  That way, we
    can check that a block of a certain name is a IDOM or DOMFRONT of another
    named block.
    c                 óL   — t          |¦  «        }|                     ¦   «          |S rQ   )r   Úrun)r`   ÚbcÚcfas      r   r¯  zTestRealCodeDomFront.cfa;  s!   € Ý! "Ñ%Ô%ˆØ�Š‰	Œ	ˆ	Øˆ
r   c                 ó¨   — t          j        |¦  «        }t          |¬¦  «        }|                      |¦  «        }|                      ||¦  «        }||fS )N)Úfunc_id)r   Úfrom_functionr	   r¯  Ú_scan_namedblocks)r`   ÚfnÚfidr®  r¯  Únamedblockss         r   Úget_cfa_and_namedblocksz,TestRealCodeDomFront.get_cfa_and_namedblocks@  sS   € ÝÔ,¨RÑ0Ô0ˆÝ˜cÐ"Ñ"Ô"ˆØ�hŠh�r‰lŒlˆØ×,Ò,¨R°Ñ5Ô5ˆð �KÐÐr   c                 óÊ  — i }t          d„ |                     ¦   «         D ¦   «         ¦  «        }d}|D ]°}|j        dk    r£|j        t	          |j        ¦  «                 }|                     |¦  «        ro|t          |¦  «        d…         }t          ||dd…         |d         dz   gz   ¦  «        D ]\  }	}
|	|j	        cxk    r|
k     rn Œ nŒt          d¦  «        ‚|	}|||<   Œ±|S )zÉScan namedblocks as denoted by a LOAD_GLOBAL bytecode referring
        to global variables with the pattern "SET_BLOCK_<name>", where "<name>"
        would be the name for the current block.
        c                 ó   — g | ]	}|j         ‘Œ
S r    )Úoffset)Ú.0r   s     r   ú
<listcomp>z:TestRealCodeDomFront._scan_namedblocks.<locals>.<listcomp>Y  s   € Ð<Ð<Ð< a˜œÐ<Ð<Ð<r   Ú
SET_BLOCK_ÚLOAD_GLOBALNr%   r   zunreachable loop)r  Ú
iterblocksÚopnameÚco_namesr
   ÚargÚ
startswithr&  Úziprº  ÚAssertionError)r`   r®  r¯  r¶  ÚblocksÚprefixÚinstÚgvÚnameÚsri   Úblknos               r   r³  z&TestRealCodeDomFront._scan_namedblocksS  s  € ð
 ˆÝÐ<Ð<¨3¯>ª>Ñ+;Ô+;Ð<Ñ<Ô<Ñ=Ô=ˆØˆàð 	.ð 	.ˆDàŒ{˜mÒ+Ð+Ø”[Õ!5°d´hÑ!?Ô!?Ô@�Ø—=’= Ñ(Ô(ð 	.Ø�c &™kœk˜l˜lÔ+�Då # F¨F°1°2°2¬J¸&À¼*Àq¹.Ð9IÑ,IÑ JÔ Jð Að A™˜˜1Ø ¤Ð/Ð/Ò/Ð/¨aÒ/Ð/Ð/Ð/Ð/Ø!˜Eð 0õ -Ð-?Ñ@Ô@Ð@Ø�EØ(-�K Ñ%øØÐr   c                 óö  — d„ }|                       |¦  «        \  }}|j                             ¦   «         }t          dk     r(|                      |d         ||d                  ¦  «         |j                             ¦   «         }|                      ||d                  ¦  «         |                      ||d                  ¦  «         t          dk     r+|                      |d         h||d                  ¦  «         d S d S )Nc                 óh   — d}t            d}t          rt           |dz  }|dz  }t          °t           |S r(   )ÚSET_BLOCK_AÚSET_BLOCK_B0ÚSET_BLOCK_B1ÚSET_BLOCK_C)ÚnÚcr   s      r   Úfooz+TestRealCodeDomFront.test_loop.<locals>.foom  sF   € ØˆAÝˆKØˆAÝð Ý�Ø�Q‘�Ø�Q‘�õ ð õ ˆKØˆHr   ©rE   r$   ÚB0ÚB1ÚAÚC)r·  rX  ra  r   r^   rg  ÚassertFalse©r`   rÕ  r¯  Úblkptsrb  Údomfronts         r   Ú	test_loopzTestRealCodeDomFront.test_loopl  sø   € ð		ð 		ð 		ð ×2Ò2°3Ñ7Ô7‰ˆˆVØ”	×.Ò.Ñ0Ô0ˆõ
 �wÒÐØ×Ò˜V Dœ\¨5°¸´Ô+>Ñ?Ô?Ð?à”9×/Ò/Ñ1Ô1ˆØ×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ý�wÒÐØ×Ò˜f Tœl˜^¨X°f¸T´lÔ-CÑDÔDÐDÐDÐDð Ðr   c                 ó`  — d„ }|                       |¦  «        \  }}|j                             ¦   «         }|                      |d         |d         ¦  «         t          dk     r(|                      |d         ||d                  ¦  «         |j                             ¦   «         }|                      ||d                  ¦  «         |                      ||d                  ¦  «         t          dk     r)|                      |d         h||d	                  ¦  «         t          dk     r0|                      |d         |d
         h||d                  ¦  «         |                      |d
         h||d                  ¦  «         |                      |d         h||d                  ¦  «         t          dk     r}|                      |d         h||d                  ¦  «         |                      |d         h||d
                  ¦  «         |                      |d         h||d                  ¦  «         d S d S )Nc                 óÂ   — t            t          rIt           t          r-t           t
          rt           n| rt           t           t          °-t           t          °It           d S rQ   )rÏ  rÐ  rÑ  ÚSET_BLOCK_C0ÚSET_BLOCK_C1ÚSET_BLOCK_D0ÚSET_BLOCK_D1ÚSET_BLOCK_D2ÚSET_BLOCK_EÚSET_BLOCK_FÚSET_BLOCK_G)rÓ  s    r   rÕ  z<TestRealCodeDomFront.test_loop_nested_and_break.<locals>.fooˆ  si   € ÝˆKÝð 
Ý�Ý"ð  Ý �LÝ#ð %Ý$˜ØØð %Ý$˜Ý�Kõ #ð  õ �õ ð 
õ ˆKˆKˆKr   ÚD0ÚC1rÖ  ÚC0rÙ  ÚGr×  rØ  ÚFÚD1ÚEÚD2)r·  rX  ra  r^   r   rg  rÛ  rÜ  s         r   Útest_loop_nested_and_breakz/TestRealCodeDomFront.test_loop_nested_and_break‡  s  € ð	ð 	ð 	ð ×2Ò2°3Ñ7Ô7‰ˆˆVØ”	×.Ò.Ñ0Ô0ˆØ×Ò˜ œ v¨d¤|Ñ4Ô4Ð4õ �wÒÐØ×Ò˜V Dœ\¨5°¸´Ô+>Ñ?Ô?Ð?à”9×/Ò/Ñ1Ô1ˆØ×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ý�wÒÐØ×Ò˜f Tœl˜^¨X°f¸T´lÔ-CÑDÔDÐDõ �wÒÐØ×Ò˜f Tœl¨F°3¬KÐ8Ø% f¨T¤lÔ3ñ5ô 5ð 5à×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ø×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ý�wÒÐØ×Ò˜f Tœl˜^¨X°f¸S´kÔ-BÑCÔCÐCØ×Ò˜f Tœl˜^¨X°f¸S´kÔ-BÑCÔCÐCØ×Ò˜f Tœl˜^¨X°f¸T´lÔ-CÑDÔDÐDÐDÐDð Ðr   c                 ó0  — d„ }|                       |¦  «        \  }}|j                             ¦   «         }|                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d	                  ¦  «         |j                             ¦   «         }|                      ||d                  ¦  «         |                      ||d                  ¦  «         |                      ||d	                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d	         h||d                  ¦  «         d S )
Nc                 ó²   — d}t            | |k     r
t           d}nt          r
t           d}n	t           d}t
           | |z  dk    rt           |dz  }t           |S )Nr   r%   r1   rE   )rÏ  ÚSET_BLOCK_Brâ  rã  ÚSET_BLOCK_Drç  rè  ré  )r§  ÚbrÔ  s      r   rÕ  z.TestRealCodeDomFront.test_if_else.<locals>.foo±  si   € ØˆAÝˆKØ�1ŠuˆuÝ�Ø��Ýð Ý�Ø��å�Ø�åˆKØ�1‰u˜ŠzˆzÝ�Ø�Q‘�ÝˆKØˆHr   rÙ  ÚBrì  rë  ÚDrð  rî  rí  ©r·  rX  ra  r^   rg  rÛ  rÜ  s         r   Útest_if_elsez!TestRealCodeDomFront.test_if_else°  s[  € ð	ð 	ð 	ð( ×2Ò2°3Ñ7Ô7‰ˆˆVà”	×.Ò.Ñ0Ô0ˆØ×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9Ø×Ò˜ œ e¨F°4¬LÔ&9Ñ:Ô:Ð:Ø×Ò˜ œ u¨V°D¬\Ô':Ñ;Ô;Ð;Ø×Ò˜ œ u¨V°C¬[Ô'9Ñ:Ô:Ð:Ø×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9Ø×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9Ø×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9à”9×/Ò/Ñ1Ô1ˆØ×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ø×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ø×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ð>Ð>r   c                 óL  — d„ }|                       |¦  «        \  }}|j                             ¦   «         }|                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |j                             ¦   «         }|                      ||d                  ¦  «         |                      ||d                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d         h||d	                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d         h||d                  ¦  «         d S )
Nc                  ó¢   — t           r@t           t          r
t           d} n!t          r
t
           d} n	t           d} t           t           t           | S )Nr   r%   r1   )
ÚSET_BLOCK_A0ÚSET_BLOCK_A1rÐ  rÑ  râ  rã  ÚSET_BLOCK_C2rö  rç  rè  )r§  s    r   rÕ  z5TestRealCodeDomFront.test_if_else_nested.<locals>.fooÛ  sU   € Ýð Ý�Ýð 
 Ý �LØ�A�Aå#ð Ý$˜Ø˜˜å$˜Ø˜Ý�KÝ�ÝˆKØˆHr   ÚA0ÚA1rØ  rì  rù  rð  rî  rë  rú  rÜ  s         r   Útest_if_else_nestedz(TestRealCodeDomFront.test_if_else_nestedÚ  sö  € ð	ð 	ð 	ð$ ×2Ò2°3Ñ7Ô7‰ˆˆVà”	×.Ò.Ñ0Ô0ˆØ×Ò˜ œ u¨V°D¬\Ô':Ñ;Ô;Ð;Ø×Ò˜ œ u¨V°D¬\Ô':Ñ;Ô;Ð;Ø×Ò˜ œ u¨V°D¬\Ô':Ñ;Ô;Ð;Ø×Ò˜ œ u¨V°C¬[Ô'9Ñ:Ô:Ð:Ø×Ò˜ œ u¨V°C¬[Ô'9Ñ:Ô:Ð:Ø×Ò˜ œ u¨V°C¬[Ô'9Ñ:Ô:Ð:à”9×/Ò/Ñ1Ô1ˆØ×Ò˜ &¨¤,Ô/Ñ0Ô0Ð0Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ø×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ð>Ð>r   c                 ó2  — d„ }|                       |¦  «        \  }}|j                             ¦   «         }t          dk    r|                      d|¦  «         n|                      |d         |¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |j                             ¦   «         }t          dk     r|                      |d         |¦  «         |                      ||d                  ¦  «         |                      ||d                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d         h||d                  ¦  «         d S )Nc                  óB   — t            	 t          r	t           d S t           ŒrQ   )rÏ  rõ  rÒ  rö  rç  r    r   r   rÕ  z4TestRealCodeDomFront.test_infinite_loop.<locals>.foo   s(   € ÝˆKðÝð Ý�KØ�FÝ�ð	r   rÖ  rð  rø  rÚ  rù  rÙ  )r·  rX  ra  r   ÚassertNotInr^   rg  rÛ  rÜ  s         r   Útest_infinite_loopz'TestRealCodeDomFront.test_infinite_loopÿ  s…  € ð	ð 	ð 	ð ×2Ò2°3Ñ7Ô7‰ˆˆVà”	×.Ò.Ñ0Ô0ˆõ ˜ÒÐØ×Ò˜S &Ñ)Ô)Ð)Ð)à×Ò˜V Cœ[¨%Ñ0Ô0Ð0Ø×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9Ø×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9à”9×/Ò/Ñ1Ô1ˆÝ�wÒÐØ×Ò˜V Cœ[¨(Ñ3Ô3Ð3Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ð>Ð>r   N)rÕ   rÖ   r×   r©  r¯  r·  r³  rß  rò  rû  r  r  r    r   r   r«  r«  /  sŸ   € € € € € ð
ð 
ðð ð ð
 ð  ð  ð&ð ð ð2Eð Eð Eð6'Eð 'Eð 'EðR(?ð (?ð (?ðT#?ð #?ð #?ðJ?ð ?ð ?ð ?ð ?r   r«  Ú__main__)3r[   ÚunittestÚnumba.core.controlflowr   r   Únumba.core.compilerr   r   Ú
numba.corer   Únumba.core.bytecoder   r	   r
   Únumba.core.utilsr   Únumba.tests.supportr   rØ   Úenable_pyobjectÚforceobj_flagsÚforce_pyobjectrr   Únrtr   r   r"   r&   r)   r+   r-   r/   r3   r5   r7   r:   r<   r>   r@   rC   rF   rH   rJ   rL   rO   rS   rU   rÚ   r«  rÕ   Úmainr    r   r   ú<module>r     sâ  ðØ Ð Ð Ð à €€€Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ &Ð &Ð &Ð &Ð &Ð &Ø (Ð (Ð (Ð (Ð (Ð (à�U‘W”WÐ Ø%)Ð Ô "à�‘”€Ø $€Ô à�‘”€Ø€Ô ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð	ð 	ð 	ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð
$ð $ð $ðð ð ð ð ð ð^=ð ^=ð ^=ð ^=ð ^=�hñ ^=ô ^=ð ^=ðBm
"ð m
"ð m
"ð m
"ð m
"�(ñ m
"ô m
"ð m
"ð`l?ð l?ð l?ð l?ð l?˜8ñ l?ô l?ð l?ð^ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   