§
    2@Äj°«  ã                   ór  — d dl Z d dlZd dl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 i Zd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& G d„ d e¦  «        Z' G d!„ d"e¦  «        Z( G d#„ d$e¦  «        Z)e*d%k    r ej+        ¦   «          dS dS )&é    N)Újit)ÚCFGraphÚControlFlowAnalysis)Útypes)ÚFunctionIdentityÚByteCodeÚ_fix_LOAD_GLOBAL_arg)ÚTestCaseT)Ú_nrtÚnopythonc                 ó8   — d}t          | ¦  «        D ]}||z  }Œ|S ©Nr   ©Úrange©ÚxÚyÚresultÚis       úNC:\Projects\Historical\venv\Lib\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)   -   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+   6   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-   ?   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/   I   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   P   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   ^   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   h   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:   q   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<   x   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fi |¤Ž|¦  «        }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 )Nz(Invalid for pure-python but numba works
)	r   r   ÚintpÚ	itertoolsÚproductrR   ÚfailÚassertEqualÚtype)ÚselfÚpyfuncÚ
x_operandsÚ
y_operandsÚflagsÚcfuncr   r   ÚpyerrÚcerrÚpyresÚeÚcress                r   Úrun_testzTestFlowControl.run_testÚ   sW  € à6••U”Z¥¤Ð,Ð6Ð6°Ð6Ð6°vÑ>Ô>ˆÝÔ% 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Á
A/Á#A*Á*A/Á3B0Â0
C9Â:5C4Ã4C9c                 óH   — |                       t          g d¢dg|¬¦  «         d S )N©iöÿÿÿr   r$   r   ©ra   )rh   r   ©r]   ra   s     r   Útest_for_loop1zTestFlowControl.test_for_loop1ò   s)   € Ø�ŠÕ'¨¨¨¸°sÀ%ˆÑHÔHÐHÐHÐHr   c                 ó<   — |                       t          ¬¦  «         d S ©Nrk   )rm   Ú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 )Nrj   rk   )rh   r   rl   s     r   Útest_for_loop2zTestFlowControl.test_for_loop2ø   s9   € Ø�ŠÕ'¨¨¨°|°|°|Ø!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S ro   )ru   rp   rq   s    r   Útest_for_loop2_npmz"TestFlowControl.test_for_loop2_npmü   rs   r   c                 óF   — |                       t          dgdg|¬¦  «         dS )z(
        List requires pyobject
        r%   r1   rk   N)rh   r"   rl   s     r   Útest_for_loop3zTestFlowControl.test_for_loop3ÿ   s7   € ð 	�ŠÕ'¨!¨¨q¨cØ!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S ro   )ry   rp   rq   s    r   Útest_for_loop3_npmz"TestFlowControl.test_for_loop3_npm  rs   r   c                 óF   — |                       t          dgdg|¬¦  «         d S ©Nr$   rk   )rh   r&   rl   s     r   Útest_for_loop4zTestFlowControl.test_for_loop4	  s'   € Ø�ŠÕ'¨"¨°¨t¸5ˆÑAÔAÐAÐAÐAr   c                 ó<   — |                       t          ¬¦  «         d S ro   )r~   rp   rq   s    r   Útest_for_loop4_npmz"TestFlowControl.test_for_loop4_npm  rs   r   c                 óF   — |                       t          dgdg|¬¦  «         d S ©Néd   é2   rk   )rh   r)   rl   s     r   Útest_for_loop5zTestFlowControl.test_for_loop5  ó'   € Ø�ŠÕ'¨#¨°°¸EˆÑBÔBÐBÐBÐBr   c                 ó<   — |                       t          ¬¦  «         d S ro   )r…   rp   rq   s    r   Útest_for_loop5_npmz"TestFlowControl.test_for_loop5_npm  rs   r   c                 óF   — |                       t          dgdg|¬¦  «         d S r‚   )rh   r+   rl   s     r   Útest_for_loop6zTestFlowControl.test_for_loop6  r†   r   c                 ó<   — |                       t          ¬¦  «         d S ro   )rŠ   rp   rq   s    r   Útest_for_loop6_npmz"TestFlowControl.test_for_loop6_npm  rs   r   c                 óF   — |                       t          dgdg|¬¦  «         d S )Né   r   rk   )rh   r-   rl   s     r   Útest_for_loop7zTestFlowControl.test_for_loop7  s'   € Ø�ŠÕ'¨!¨¨q¨c¸ˆÑ?Ô?Ð?Ð?Ð?r   c                 ó<   — |                       t          ¬¦  «         d S ro   )r�   rp   rq   s    r   Útest_for_loop7_npmz"TestFlowControl.test_for_loop7_npm  rs   r   c                 óJ   — |                       t          ddgg d¢|¬¦  «         d S ©Nr   r%   )r   r1   r$   rk   )rh   r/   rl   s     r   Útest_for_loop8zTestFlowControl.test_for_loop8!  ó+   € Ø�ŠÕ'¨!¨Q¨°°°À5ˆÑIÔIÐIÐIÐIr   c                 ó<   — |                       t          ¬¦  «         d S ro   )r”   rp   rq   s    r   Útest_for_loop8_npmz"TestFlowControl.test_for_loop8_npm$  rs   r   c                 óJ   — |                       t          ddgg d¢|¬¦  «         d S r“   )rh   r3   rl   s     r   Útest_for_loop9zTestFlowControl.test_for_loop9'  r•   r   c                 ó<   — |                       t          ¬¦  «         d S ro   )r™   rp   rq   s    r   Útest_for_loop9_npmz"TestFlowControl.test_for_loop9_npm*  rs   r   c                 óH   — |                       t          dgddg|¬¦  «         d S )NrŽ   r1   é   rk   )rh   r5   rl   s     r   Útest_for_loop10zTestFlowControl.test_for_loop10-  s)   € Ø�ŠÕ(¨1¨#°°1¨v¸UˆÑCÔCÐCÐCÐCr   c                 ó<   — |                       t          ¬¦  «         d S ro   )rž   rp   rq   s    r   Útest_for_loop10_npmz#TestFlowControl.test_for_loop10_npm0  s   € Ø×Ò¥>ÐÑ2Ô2Ð2Ð2Ð2r   c                 óF   — |                       t          dgdg|¬¦  «         d S ©Nr$   r   rk   )rh   r7   rl   s     r   Útest_while_loop1z TestFlowControl.test_while_loop13  ó'   € Ø�ŠÕ)¨B¨4°!°¸EˆÑBÔBÐBÐBÐBr   c                 ó<   — |                       t          ¬¦  «         d S ro   )r£   rp   rq   s    r   Útest_while_loop1_npmz$TestFlowControl.test_while_loop1_npm6  ó   € Ø×Ò¥NÐÑ3Ô3Ð3Ð3Ð3r   c                 óF   — |                       t          dgdg|¬¦  «         d S r¢   )rh   r:   rl   s     r   Útest_while_loop2z TestFlowControl.test_while_loop29  r¤   r   c                 ó<   — |                       t          ¬¦  «         d S ro   )r©   rp   rq   s    r   Útest_while_loop2_npmz$TestFlowControl.test_while_loop2_npm<  r§   r   c                 óF   — |                       t          dgdg|¬¦  «         d S r}   )rh   r<   rl   s     r   Útest_while_loop3z TestFlowControl.test_while_loop3?  s'   € Ø�ŠÕ)¨B¨4°"°¸UˆÑCÔCÐCÐCÐCr   c                 ó<   — |                       t          ¬¦  «         d S ro   )r­   rp   rq   s    r   Útest_while_loop3_npmz$TestFlowControl.test_while_loop3_npmB  r§   r   c                 óF   — |                       t          dgdg|¬¦  «         d S r¢   )rh   r>   rl   s     r   Útest_while_loop4z TestFlowControl.test_while_loop4E  r¤   r   c                 ó<   — |                       t          ¬¦  «         d S ro   )r±   rp   rq   s    r   Útest_while_loop4_npmz$TestFlowControl.test_while_loop4_npmH  r§   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S )N)r   rŽ   r$   rk   )rh   r@   rl   s     r   Útest_while_loop5z TestFlowControl.test_while_loop5K  s+   € Ø�ŠÕ)¨:¨:¨:°z°z°zÈˆÑOÔOÐOÐOÐOr   c                 ó<   — |                       t          ¬¦  «         d S ro   )rµ   rp   rq   s    r   Útest_while_loop5_npmz$TestFlowControl.test_while_loop5_npmN  r§   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S ©N)r   r   r%   rk   )rh   rC   rl   s     r   Útest_ifelse1zTestFlowControl.test_ifelse1Q  ó*   € Ø�Š•o z z z°:°:°:ÀUˆÑKÔKÐKÐKÐKr   c                 ó<   — |                       t          ¬¦  «         d S ro   )rº   rp   rq   s    r   Útest_ifelse1_npmz TestFlowControl.test_ifelse1_npmT  ó   € Ø×Ò¥ÐÑ/Ô/Ð/Ð/Ð/r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r¹   )rh   rF   rl   s     r   Útest_ifelse2zTestFlowControl.test_ifelse2W  r»   r   c                 ó<   — |                       t          ¬¦  «         d S ro   )rÀ   rp   rq   s    r   Útest_ifelse2_npmz TestFlowControl.test_ifelse2_npmZ  r¾   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r¹   )rh   rH   rl   s     r   Útest_ifelse3zTestFlowControl.test_ifelse3]  r»   r   c                 ó<   — |                       t          ¬¦  «         d S ro   )rÄ   rp   rq   s    r   Útest_ifelse3_npmz TestFlowControl.test_ifelse3_npm`  r¾   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r¹   )rh   rJ   rl   s     r   Útest_ifelse4zTestFlowControl.test_ifelse4c  r»   r   c                 ó<   — |                       t          ¬¦  «         d S ro   )rÈ   rp   rq   s    r   Útest_ifelse4_npmz TestFlowControl.test_ifelse4_npmf  r¾   r   c                 óJ   — |                       t          g d¢g d¢|¬¦  «         d S r¹   )rh   rL   rl   s     r   Útest_ternary_ifelse1z$TestFlowControl.test_ternary_ifelse1i  s9   € Ø�ŠÕ-¨z¨z¨z¸:¸:¸:Ø!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S ro   )rÌ   rp   rq   s    r   Útest_ternary_ifelse1_npmz(TestFlowControl.test_ternary_ifelse1_npmm  s   € Ø×!Ò!­Ð!Ñ7Ô7Ð7Ð7Ð7r   c                 óF   — |                       t          dgdg|¬¦  «         d S r¢   )rh   rO   rl   s     r   Útest_double_infinite_loopz)TestFlowControl.test_double_infinite_loopp  s5   € Ø�ŠÕ*¨R¨D°1°#Ø!ð 	ñ 	#ô 	#ð 	#ð 	#ð 	#r   c                 ó<   — |                       t          ¬¦  «         d S ro   )rÐ   rp   rq   s    r   Útest_double_infinite_loop_npmz-TestFlowControl.test_double_infinite_loop_npmt  s   € Ø×&Ò&­^Ð&Ñ<Ô<Ð<Ð<Ð<r   N)/Ú__name__Ú
__module__Ú__qualname__Úenable_pyobj_flagsrh   rm   rr   ru   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   rU   rU   Ø   sº  € € € € € ð *ð.ð .ð .ð .ð0 $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]   ÚdÚentry_pointÚ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_nodes3  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_descendentsI  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¢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å   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_ordera  sJ  € Ø�NŠNÑÔˆØ�Š�a—l’l‘n”nØ&��¨¨¨Ð8ñ	:ô 	:ð 	:à�NŠNÑÔˆØ�Š�a—l’l‘n”nØ/Ð/Ð/Ð1IÐ1IÐ1IØ/Ð/Ð/Ð1IÐ1IÐ1IðKñ	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_sortr  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]   r9  rß   s   ` @r   Útest_topo_sortzTestCFGraph.test_topo_sortq  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]   Úgotr8  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]   rD  rß   rC  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  rF  r>  r	  r  ©r]   rß   rC  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<  rA  s     €€r   rD  z6TestCFGraph.test_post_dominators_loopless.<locals>.eq_Í  rE  r   r   rç   ræ   rå   rö   rõ   rø   )rí   ró   Úpost_dominatorsrù   rG  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  rN  r>  r	  rJ  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  rN  r>  r  rJ  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[   )Úgraphr8  Ú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]   rY  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[   )rW  r8  Úidomsr]   s      €r   rY  z4TestCFGraph.test_immediate_dominators.<locals>.check2  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_dominators1  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[   )rW  r8  Údfr]   s      €r   rY  z2TestCFGraph.test_dominance_frontier.<locals>.checkH  s0   ø€ Ø×)Ò)Ñ+Ô+ˆBØ×Ò˜R Ñ*Ô*Ð*Ð*Ð*r   rç   rè   rb  r   r�   r$   rü   rý   rÿ   r   r  rþ   r  rû   r  r  r  r  r  r  r  r  r  rE   r  rZ  r\  s   ` r   Útest_dominance_frontierz#TestCFGraph.test_dominance_frontierG  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_loopless^  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  rj  r  r  rì   s     r   Útest_backbone_loopszTestCFGraph.test_backbone_loopsd  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_loopsl  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   Nro  ) rÓ   rÔ   rÕ   Ú__doc__rã   rí   ró   rù   r	  r  r  r  r  r"  r(  r,  r0  r:  r>  rH  rK  rO  rQ  rS  r]  rc  rh  rk  rm  rz  r¡  r§  r    r   r   rØ   rØ   x  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.cfa5  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>S  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Úsrf   Úblknos               r   r²  z&TestRealCodeDomFront._scan_namedblocksM  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                             ¦   «         }|                      ||d                  ¦  «         |                      ||d                  ¦  «         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>.foog  sF   € ØˆAÝˆKØˆAÝð Ý�Ø�Q‘�Ø�Q‘�õ ð õ ˆKØˆHr   ÚAÚC)r¶  rW  rf  ÚassertFalse©r]   rÔ  r®  ÚblkptsÚdomfronts        r   Ú	test_loopzTestRealCodeDomFront.test_loopf  s   € ð		ð 		ð 		ð ×2Ò2°3Ñ7Ô7‰ˆˆVð
 ”9×/Ò/Ñ1Ô1ˆØ×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ð/Ð/r   c                 óÚ  — d„ }|                       |¦  «        \  }}|                      |d         |d         ¦  «         |j                             ¦   «         }|                      ||d                  ¦  «         |                      ||d                  ¦  «         |                      |d         h||d                  ¦  «         |                      |d         h||d	                  ¦  «         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Õ  ÚGÚFÚD1ÚEÚD2)r¶  r[   rW  rf  r×  rØ  s        r   Útest_loop_nested_and_breakz/TestRealCodeDomFront.test_loop_nested_and_break{  sé   € ð	ð 	ð 	ð ×2Ò2°3Ñ7Ô7‰ˆˆVØ×Ò˜ œ v¨d¤|Ñ4Ô4Ð4ð ”9×/Ò/Ñ1Ô1ˆØ×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/ð 	×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ø×Ò˜& œ+˜¨°¸´Ô(>Ñ?Ô?Ð?Ð?Ð?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Õ  ÚBÚC0rç  ÚDrë  ré  rè  ©r¶  rW  r`  r[   rf  r×  ©r]   rÔ  r®  rÙ  ra  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ÚA1ÚB1rô  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                 ó”  — d„ }|                       |¦  «        \  }}|j                             ¦   «         }|                      d|¦  «         |                      |d         ||d                  ¦  «         |                      |d         ||d                  ¦  «         |j                             ¦   «         }|                      ||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¶  rW  r`  ÚassertNotInr[   rf  r×  r÷  s         r   Útest_infinite_loopz'TestRealCodeDomFront.test_infinite_loopæ  s8  € ð	ð 	ð 	ð ×2Ò2°3Ñ7Ô7‰ˆˆVà”	×.Ò.Ñ0Ô0ˆð 	×Ò˜˜fÑ%Ô%Ð%Ø×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9Ø×Ò˜ œ e¨F°3¬KÔ&8Ñ9Ô9Ð9à”9×/Ò/Ñ1Ô1ˆØ×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜ &¨¤+Ô.Ñ/Ô/Ð/Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ø×Ò˜& œ+˜¨°¸´Ô(=Ñ>Ô>Ð>Ð>Ð>r   N)rÓ   rÔ   rÕ   r¨  r®  r¶  r²  rÛ  rí  rø  r  r  r    r   r   rª  rª  )  s›   € € € € € ð
ð 
ðð ð ð
 ð  ð  ð&ð ð ð20ð 0ð 0ð*@ð @ð @ð8(?ð (?ð (?ðT#?ð #?ð #?ðJ?ð ?ð ?ð ?ð ?r   rª  Ú__main__),rX   ÚunittestÚnumbar   Únumba.core.controlflowr   r   Ú
numba.corer   Únumba.core.bytecoder   r   r	   Únumba.tests.supportr
   rÖ   rp   r   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¢  ðØ Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ (Ð (Ð (Ð (Ð (Ð (àÐ à¨DÐ1Ð1€ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð	ð 	ð 	ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð
$ð $ð $ðð ð ð ð ð ð]=ð ]=ð ]=ð ]=ð ]=�hñ ]=ô ]=ð ]=ð@n
"ð n
"ð n
"ð n
"ð n
"�(ñ n
"ô n
"ð n
"ðbT?ð T?ð T?ð T?ð T?˜8ñ T?ô T?ð T?ðn ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   