Ë
    èÿæid¦  ã                   ó^  — 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jV                  «        yy)&é    N)Újit)ÚCFGraphÚControlFlowAnalysis)Útypes)ÚFunctionIdentityÚByteCodeÚ_fix_LOAD_GLOBAL_arg)ÚTestCaseT)Ú_nrtÚnopythonc                 ó4   — d}t        | «      D ]  }||z  }Œ	 |S ©Nr   ©Úrange©ÚxÚyÚresultÚis       úr/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_flow_control.pyÚfor_loop_usecase1r      s#   € Ø€FÜ�1ŽXˆØ�!‰‰ð à€Mó    c                 óV   — d}t        t        | |d«      «      D ]  \  }}|||z  z  }Œ |S )Nr   éÿÿÿÿ)Ú	enumerater   ©r   r   r   r   Újs        r   Úfor_loop_usecase2r      s4   € Ø€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                 óT   — d}t        d«      D ]  }t        d«      D ]  }|dz  }Œ	 Œ |S )Nr   é
   é   r   r   s        r   Úfor_loop_usecase4r&   %   s3   € Ø€FÜ�2ŽYˆÜ�r–ˆAØ�a‰K‰Fñ ð ð €Mr   c                 óD   — d}t        | «      D ]  }|dz  }||kD  sŒ |S  |S ©Nr   r%   r   r   s       r   Úfor_loop_usecase5r)   -   s4   € Ø€FÜ�1ŽXˆØ�!‰ˆØ�A‹:ØØ€Mð	 ð €Mr   c                 ó@   — d}t        | «      D ]  }||kD  rŒ	|dz  }Œ |S r(   r   r   s       r   Úfor_loop_usecase6r+   6   s/   € Ø€FÜ�1ŽXˆØˆqŠ5ØØ�!‰‰ð ð €Mr   c                 óL   — t        | «      D ]  }d} t        | «      D ]  }  y Œ yr(   r   )r   r   r   r   s       r   Úfor_loop_usecase7r-   ?   s0   € Ü�1ŽXˆØˆÜ�q–ˆAÚð ð ð ð r   c                 óD   — d}t        | ||| z
  dz   «      D ]  }|dz  }Œ	 |S r(   r   r   s       r   Úfor_loop_usecase8r/   I   s0   € Ø€FÜ�1�a˜˜Q™ ™Ö#ˆØ�!‰‰ð $à€Mr   c                 óv   — d}t        | «      D ](  }d} t        | «      D ]  }|| dz  k(  sŒ||z  } Œ# ||z  }Œ* |S )Nr   é   r   )r   r   Úzr   r   s        r   Úfor_loop_usecase9r3   P   sQ   € Ø	€AÜ�1ŽXˆØˆÜ�q–ˆAØ�A˜‘E‹zØ�Q‘�Ùð ð
 �‰F‰Að ð €Hr   c                 óD   — t        | «      D ]  }||k(  sŒ	|} |S  dz  }|S )Nr1   r   )r   r   r   r2   s       r   Úfor_loop_usecase10r5   ^   s6   € Ü�1ŽXˆØ�‹6ØˆAØð €Hð ð
 �‰EˆØ€Hr   c                 ó8   — d}d}|| k  r||z  }|dz  }|| k  rŒ|S r(   r    r   s       r   Úwhile_loop_usecase1r7   h   s5   € Ø€FØ	€AØ
ˆaŠ%Ø�!‰ˆØ	ˆQ‰ˆð ˆa‹%ð €Mr   c                 ó*   — d}|| k7  r|dz  }|| k7  rŒ|S r(   r    ©r   r   r   s      r   Úwhile_loop_usecase2r:   q   s%   € Ø€FØ
�AŠ+Ø�!‰ˆð �A‹+à€Mr   c                 ób   — d}d}d}|| k  r#||k  r|||z   z  }|dz  }|dz  }||k  rŒ|| k  rŒ#|S r(   r    r   s        r   Úwhile_loop_usecase3r<   x   sW   € Ø€FØ	€AØ	€AØ
ˆaŠ%Ø�!ŠeØ�a˜!‘e‰OˆFØ�‰FˆAØ�‰FˆAð �!‹eð ˆa‹%ð
 €Mr   c                 ó$   — d}	 |dz  }|| kD  r	 |S Œr(   r    r9   s      r   Úwhile_loop_usecase4r>   „   s'   € Ø€FØ
Ø�!‰ˆØ�AŠ:ØØ€Mð	 r   c                 ó@   — d}|| k  r||kD  r|dz  }Œ|dz  }|| k  rŒ|S )Nr   r1   r%   r    r9   s      r   Úwhile_loop_usecase5r@   �   s:   € Ø€FØ
�1Š*Ø�AŠ:Ø�a‰KˆFØØ�!‰ˆð	 �1‹*ð
 €Mr   c                 ó"   — | dkD  r	 y|dkD  r	 y	 y)Nr   Tr    ©r   r   s     r   Úifelse_usecase1rC   —   s*   € Øˆ1‚uØð
 ð	 
ˆQŠØð ð 	Ør   c                 ó&   — | |kD  ry| dk(  s|dk(  ryy)Nr%   r   r1   é   r    rB   s     r   Úifelse_usecase2rF   ¡   s   € Øˆ1‚uØØ	
ˆaŠ�1˜’6Øàr   c                 ó4   — | dkD  r|dkD  ry|dk  ryy| dk  ryyr(   r    rB   s     r   Úifelse_usecase3rH   ª   s-   € Øˆ1‚uØˆqŠ5ØØ�ŠUØàØ	
ˆQŠØàr   c                 ó   — | |k(  ryy ©Nr%   r    rB   s     r   Úifelse_usecase4rK   ¸   s   € ØˆA‚vØð r   c                 ó   — | |kD  rdS dS )NTFr    rB   s     r   Úternary_ifelse_usecase1rM   ½   s   € Ø�q’5ˆ4Ð#˜eÐ#r   c                 óL   — | }|}	 	 ||dz
  k(  rn|dz  }Œ|dz  }||k\  r	 ||fS Œ rJ   r    )r   r   ÚLr   s       r   Údouble_infinite_looprP   Á   sQ   € Ø	€AØ	€Aà
ØØ�A˜‘EŠzØØ�‰FˆAð ð 	
ˆQ‰ˆØ�Š6Øàˆaˆ4€Kð r   c                  ó$   — 	 y # t         $ r Y y w xY w©N)Ú	Exceptionr    r   r   Útry_except_usecaserT   Ñ   s   € ðØøÜò Ùðús   ƒ	Žc                   óf  — 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.y,)-ÚTestFlowControlc                 óÎ  —  t        t        j                  t        j                  ffi |¤Ž|«      }t        j                  ||«      D ]E  \  }}d }d }		  |||«      }
	  |||«      }|�| j                  d|z   «       | j                  
|«       ŒG y # t
        $ r}|}Y d }~ŒEd }~ww xY w# t
        $ r3}|€‚ |}	| j                  t        |«      t        |	«      «       Y d }~Œ˜d }~ww xY w)Nz(Invalid for pure-python but numba works
)	r   r   ÚintpÚ	itertoolsÚproductrS   ÚfailÚassertEqualÚtype)ÚselfÚpyfuncÚ
x_operandsÚ
y_operandsÚflagsÚcfuncr   r   ÚpyerrÚcerrÚpyresÚeÚcress                r   Úrun_testzTestFlowControl.run_testÚ   sé   € à6””U—Z‘Z¤§¡Ð,Ñ6°Ñ6°vÓ>ˆÜ×%Ñ% j°*Ö=‰DˆAˆqØˆEØˆDðÙ˜q !›�ð.Ù˜Q “{�ð Ð$Ø—I‘IÐIØ#ñ$ô %à× Ñ  ¨Õ-ñ' >øô
 ò Ø•ûðûô
 ò :Ø�=ØØ�Ø× Ñ ¤ e£¬d°4«j×9Ñ9ûð	:ús0   Á	BÁ	B(Â	B%ÂB Â B%Â(	C$Â1)CÃC$c                 ó<   — | j                  t        g d¢dg|¬«       y )N©iöÿÿÿr   r$   r   ©rb   )ri   r   ©r^   rb   s     r   Útest_for_loop1zTestFlowControl.test_for_loop1ò   s   € Ø�‰Ô'ª¸°sÀ%ˆÕHr   c                 ó0   — | j                  t        ¬«       y ©Nrl   )rn   Úno_pyobj_flags©r^   s    r   Útest_for_loop1_npmz"TestFlowControl.test_for_loop1_npmõ   ó   € Ø×Ñ¤.ÐÕ1r   c                 ó>   — | j                  t        g d¢g d¢|¬«       y )Nrk   rl   )ri   r   rm   s     r   Útest_for_loop2zTestFlowControl.test_for_loop2ø   s   € Ø�‰Ô'ª²|Ø!ð 	õ 	#r   c                 ó0   — | j                  t        ¬«       y rp   )rv   rq   rr   s    r   Útest_for_loop2_npmz"TestFlowControl.test_for_loop2_npmü   rt   r   c                 ó:   — | j                  t        dgdg|¬«       y)z(
        List requires pyobject
        r%   r1   rl   N)ri   r"   rm   s     r   Útest_for_loop3zTestFlowControl.test_for_loop3ÿ   s#   € ð 	�‰Ô'¨!¨¨q¨cØ!ð 	õ 	#r   c                 ó0   — | j                  t        ¬«       y rp   )rz   rq   rr   s    r   Útest_for_loop3_npmz"TestFlowControl.test_for_loop3_npm  rt   r   c                 ó:   — | j                  t        dgdg|¬«       y ©Nr$   rl   )ri   r&   rm   s     r   Útest_for_loop4zTestFlowControl.test_for_loop4	  s   € Ø�‰Ô'¨"¨°¨t¸5ˆÕAr   c                 ó0   — | j                  t        ¬«       y rp   )r   rq   rr   s    r   Útest_for_loop4_npmz"TestFlowControl.test_for_loop4_npm  rt   r   c                 ó:   — | j                  t        dgdg|¬«       y ©Néd   é2   rl   )ri   r)   rm   s     r   Útest_for_loop5zTestFlowControl.test_for_loop5  ó   € Ø�‰Ô'¨#¨°°¸EˆÕBr   c                 ó0   — | j                  t        ¬«       y rp   )r†   rq   rr   s    r   Útest_for_loop5_npmz"TestFlowControl.test_for_loop5_npm  rt   r   c                 ó:   — | j                  t        dgdg|¬«       y rƒ   )ri   r+   rm   s     r   Útest_for_loop6zTestFlowControl.test_for_loop6  r‡   r   c                 ó0   — | j                  t        ¬«       y rp   )r‹   rq   rr   s    r   Útest_for_loop6_npmz"TestFlowControl.test_for_loop6_npm  rt   r   c                 ó:   — | j                  t        dgdg|¬«       y )Né   r   rl   )ri   r-   rm   s     r   Útest_for_loop7zTestFlowControl.test_for_loop7  s   € Ø�‰Ô'¨!¨¨q¨c¸ˆÕ?r   c                 ó0   — | j                  t        ¬«       y rp   )r�   rq   rr   s    r   Útest_for_loop7_npmz"TestFlowControl.test_for_loop7_npm  rt   r   c                 ó>   — | j                  t        ddgg d¢|¬«       y ©Nr   r%   )r   r1   r$   rl   )ri   r/   rm   s     r   Útest_for_loop8zTestFlowControl.test_for_loop8!  ó   € Ø�‰Ô'¨!¨Q¨²À5ˆÕIr   c                 ó0   — | j                  t        ¬«       y rp   )r•   rq   rr   s    r   Útest_for_loop8_npmz"TestFlowControl.test_for_loop8_npm$  rt   r   c                 ó>   — | j                  t        ddgg d¢|¬«       y r”   )ri   r3   rm   s     r   Útest_for_loop9zTestFlowControl.test_for_loop9'  r–   r   c                 ó0   — | j                  t        ¬«       y rp   )rš   rq   rr   s    r   Útest_for_loop9_npmz"TestFlowControl.test_for_loop9_npm*  rt   r   c                 ó<   — | j                  t        dgddg|¬«       y )Nr�   r1   é   rl   )ri   r5   rm   s     r   Útest_for_loop10zTestFlowControl.test_for_loop10-  s   € Ø�‰Ô(¨1¨#°°1¨v¸UˆÕCr   c                 ó0   — | j                  t        ¬«       y rp   )rŸ   rq   rr   s    r   Útest_for_loop10_npmz#TestFlowControl.test_for_loop10_npm0  s   € Ø×Ñ¤>ÐÕ2r   c                 ó:   — | j                  t        dgdg|¬«       y ©Nr$   r   rl   )ri   r7   rm   s     r   Útest_while_loop1z TestFlowControl.test_while_loop13  ó   € Ø�‰Ô)¨B¨4°!°¸EˆÕBr   c                 ó0   — | j                  t        ¬«       y rp   )r¤   rq   rr   s    r   Útest_while_loop1_npmz$TestFlowControl.test_while_loop1_npm6  ó   € Ø×Ñ¤NÐÕ3r   c                 ó:   — | j                  t        dgdg|¬«       y r£   )ri   r:   rm   s     r   Útest_while_loop2z TestFlowControl.test_while_loop29  r¥   r   c                 ó0   — | j                  t        ¬«       y rp   )rª   rq   rr   s    r   Útest_while_loop2_npmz$TestFlowControl.test_while_loop2_npm<  r¨   r   c                 ó:   — | j                  t        dgdg|¬«       y r~   )ri   r<   rm   s     r   Útest_while_loop3z TestFlowControl.test_while_loop3?  s   € Ø�‰Ô)¨B¨4°"°¸UˆÕCr   c                 ó0   — | j                  t        ¬«       y rp   )r®   rq   rr   s    r   Útest_while_loop3_npmz$TestFlowControl.test_while_loop3_npmB  r¨   r   c                 ó:   — | j                  t        dgdg|¬«       y r£   )ri   r>   rm   s     r   Útest_while_loop4z TestFlowControl.test_while_loop4E  r¥   r   c                 ó0   — | j                  t        ¬«       y rp   )r²   rq   rr   s    r   Útest_while_loop4_npmz$TestFlowControl.test_while_loop4_npmH  r¨   r   c                 ó>   — | j                  t        g d¢g d¢|¬«       y )N)r   r�   r$   rl   )ri   r@   rm   s     r   Útest_while_loop5z TestFlowControl.test_while_loop5K  s   € Ø�‰Ô)ª:²zÈˆÕOr   c                 ó0   — | j                  t        ¬«       y rp   )r¶   rq   rr   s    r   Útest_while_loop5_npmz$TestFlowControl.test_while_loop5_npmN  r¨   r   c                 ó>   — | j                  t        g d¢g d¢|¬«       y ©N)r   r   r%   rl   )ri   rC   rm   s     r   Útest_ifelse1zTestFlowControl.test_ifelse1Q  ó   € Ø�‰”o¢z²:ÀUˆÕKr   c                 ó0   — | j                  t        ¬«       y rp   )r»   rq   rr   s    r   Útest_ifelse1_npmz TestFlowControl.test_ifelse1_npmT  ó   € Ø×Ñ¤ÐÕ/r   c                 ó>   — | j                  t        g d¢g d¢|¬«       y rº   )ri   rF   rm   s     r   Útest_ifelse2zTestFlowControl.test_ifelse2W  r¼   r   c                 ó0   — | j                  t        ¬«       y rp   )rÁ   rq   rr   s    r   Útest_ifelse2_npmz TestFlowControl.test_ifelse2_npmZ  r¿   r   c                 ó>   — | j                  t        g d¢g d¢|¬«       y rº   )ri   rH   rm   s     r   Útest_ifelse3zTestFlowControl.test_ifelse3]  r¼   r   c                 ó0   — | j                  t        ¬«       y rp   )rÅ   rq   rr   s    r   Útest_ifelse3_npmz TestFlowControl.test_ifelse3_npm`  r¿   r   c                 ó>   — | j                  t        g d¢g d¢|¬«       y rº   )ri   rK   rm   s     r   Útest_ifelse4zTestFlowControl.test_ifelse4c  r¼   r   c                 ó0   — | j                  t        ¬«       y rp   )rÉ   rq   rr   s    r   Útest_ifelse4_npmz TestFlowControl.test_ifelse4_npmf  r¿   r   c                 ó>   — | j                  t        g d¢g d¢|¬«       y rº   )ri   rM   rm   s     r   Útest_ternary_ifelse1z$TestFlowControl.test_ternary_ifelse1i  s   € Ø�‰Ô-ªzº:Ø!ð 	õ 	#r   c                 ó0   — | j                  t        ¬«       y rp   )rÍ   rq   rr   s    r   Útest_ternary_ifelse1_npmz(TestFlowControl.test_ternary_ifelse1_npmm  s   € Ø×!Ñ!¬Ð!Õ7r   c                 ó:   — | j                  t        dgdg|¬«       y r£   )ri   rP   rm   s     r   Útest_double_infinite_loopz)TestFlowControl.test_double_infinite_loopp  s!   € Ø�‰Ô*¨R¨D°1°#Ø!ð 	õ 	#r   c                 ó0   — | j                  t        ¬«       y rp   )rÑ   rq   rr   s    r   Útest_double_infinite_loop_npmz-TestFlowControl.test_double_infinite_loop_npmt  s   € Ø×&Ñ&¬^Ð&Õ<r   N)/Ú__name__Ú
__module__Ú__qualname__Úenable_pyobj_flagsri   rn   rs   rv   rx   rz   r|   r   r�   r†   r‰   r‹   r�   r�   r’   r•   r˜   rš   rœ   rŸ   r¡   r¤   r§   rª   r¬   r®   r°   r²   r´   r¶   r¸   r»   r¾   rÁ   rÃ   rÅ   rÇ   rÉ   rË   rÍ   rÏ   rÑ   rÓ   r    r   r   rV   rV   Ø   sY  „ ð *ó.ð0 $6ó Iò2ð $6ó #ò2ð $6ó #ò2ð $6ó Bò2ð $6ó Cò2ð $6ó Cò2ð $6ó @ò2ð $6ó Jò2ð $6ó Jò2ð %7ó Dò3ð &8ó Cò4ð &8ó Cò4ð &8ó Dò4ð &8ó Cò4ð &8ó Pò4ð "4ó Lò0ð "4ó Lò0ð "4ó Lò0ð "4ó Lò0ð *<ó #ò8ð /Aó #ó=r   rV   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y) ÚTestCFGraphz3
    Test the numba.controlflow.CFGraph class.
    c                 ó¬   — t        «       }|D ]  }|j                  |«       Œ |j                  «       D ]  \  }}|D ]  }|j                  ||«       Œ Œ  |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}  sT   € ô ‹IˆãˆDØ�J‰J�tÕð àŸ7™7ž9‰KˆD�%Û�Ø—
‘
˜4 Õ&ñ ð %ð ˆr   c                 ó|   — | j                  ddgdgdgg dœ«      }|j                  d«       |j                  «        |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Š  sA   € ð ×Ñ B¨ 8°"°¸B¸4ÀRÑHÓIˆØ	×Ñ˜!ÔØ	�	‰	ŒØˆr   c                 óŽ   — | j                  ddgdgdgg ddgddgdgg dœ«      }|j                  d«       |j                  «        |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–  sa   € ð
 ×ÑØ�R�Ø�Ø�ØØ�a�Ø�b�Ø�Øñó	ˆð 	
×Ñ˜!ÔØ	�	‰	ŒØˆr   c           	      ó„   — | j                  ddgdgdgddgg g dœ«      }|j                  d«       |j                  «        |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©  sM   € ð ×ÑØ�b� ˜t¨"¨°B¸°8ÀÈÑLóNˆà	×Ñ˜"ÔØ	�	‰	ŒØˆr   c                 óø   — | j                  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 “«      }|j                  d«       |j                  «        |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¼  s$  € ð ×Ñð  (  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                 óŽ   — | j                  dgddgddgg ddgdgdgg dœ«      }|j                  d	«       |j                  «        |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á  sa   € ð ×ÑØ�Ø�R�Ø�b�ØØ�a�Ø�Ø�Øñó	ˆð 	
×Ñ˜!ÔØ	�	‰	ŒØˆr   c           	      ó†   — | j                  ddgg dgddgdgdgdœ«      }|j                  d«       |j                  «        |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û  sO   € ð ×ÑØ�Q�˜B R D¨r°2¨h¸R¸DÀrÀdÑKóMˆà	×Ñ˜!ÔØ	�	‰	ŒØˆr   c                 ó~   — | j                  dgddgdgdgdœ«      }|j                  d«       |j                  «        |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  sC   € ð ×Ñ A 3¨B°¨7¸°sÀÀÑDÓEˆØ	×Ñ˜!ÔØ	�	‰	ŒØˆr   c                 ó|  — | j                  «       }| j                  t        |j                  d«      «      ddg«       | j                  t        |j                  d«      «      g «       | j                  t        |j	                  d«      «      g «       | j                  t        |j	                  d«      «      ddg«       y )Nr   )rç   N)ræ   Nrè   )rî   r\   ÚsortedÚ
successorsÚpredecessorsrí   s     r   Útest_simple_propertiesz"TestCFGraph.test_simple_properties  s�   € Ø�N‰NÓˆØ×Ñœ §¡¨Q£Ó0°:¸zÐ2JÔKØ×Ñœ §¡¨RÓ 0Ó1°2Ô6Ø×Ñœ §¡¨qÓ 1Ó2°BÔ7Ø×Ñœ §¡¨rÓ 2Ó3°jÀ*Ð5MÕNr   c                 ó4  — | j                  «       }| j                  t        |j                  «       «      dg«       | j	                  «       }| j                  t        |j                  «       «      dg«       | j                  «       }| j                  t        |j                  «       «      ddg«       | j                  «       }| j                  t        |j                  «       «      ddg«       | j                  «       }| j                  t        |j                  «       «      dg«       | j                  «       }| j                  t        |j                  «       «      g «       | j                  «       }| j                  t        |j                  «       «      ddg«       y )	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°2°$Ô7Ø×%Ñ%Ó'ˆØ×Ñœ §¡£Ó0°2°$Ô7Ø�N‰NÓˆØ×Ñœ §¡£Ó0°2°r°(Ô;Ø×ÑÓ!ˆØ×Ñœ §¡£Ó0°2°r°(Ô;Ø×ÑÓ!ˆØ×Ñœ §¡£Ó0°1°#Ô6Ø×ÑÓ!ˆØ×Ñœ §¡£Ó0°"Ô5Ø×ÑÓ!ˆØ×Ñœ §¡£Ó0°2°r°(Õ;r   c                 ó¶  — | j                  «       }| j                  t        |j                  «       «      d«       | j                  t	        |j                  «       «      g d¢«       | j                  «       }| j                  t        |j                  «       «      d«       | j                  t	        |j                  «       «      g d¢«       | j                  «       }| j                  t        |j                  «       «      d«       | j                  «       }| j                  t        |j                  «       «      d«       | j                  «       }| j                  t        |j                  «       «      d«       | j                  «       }| j                  t	        |j                  «       «      g d¢«       | j                  t	        |j                  «       «      g d¢«       y )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  sQ  € Ø�N‰NÓˆØ×Ñœ˜QŸ\™\›^Ó,¨aÔ0Ø×Ñœ §¡£	Ó*Ú(ô	*à�N‰NÓˆØ×Ñœ˜QŸ\™\›^Ó,¨aÔ0Ø×Ñœ §¡£	Ó*Ú1ô	3à×ÑÓ!ˆØ×Ñœ˜QŸ\™\›^Ó,¨aÔ0Ø×ÑÓ!ˆØ×Ñœ˜QŸ\™\›^Ó,¨aÔ0Ø×ÑÓ!ˆØ×Ñœ˜QŸ\™\›^Ó,¨aÔ0à×%Ñ%Ó'ˆØ×Ñœ §¡£Ó/Ú)ô	+à×Ñœ §¡£	Ó*Ú(õ	*r   c                 óÈ  — | j                  «       }|j                  d«      }| j                  t        |«      g «       |j                  d«      }| j                  t        |«      g «       |j                  d«      }| j                  t        |«      ddg«       |j                  d«      }| j                  t        |«      g d¢«       | j	                  «       }|j                  d«      }| j                  t        |«      g «       |j                  d«      }| j                  t        |«      g «       |j                  d«      }| j                  t        |«      ddg«       |j                  d	«      }| j                  t        |«      g d
¢«       |j                  d«      }| j                  t        |«      g «       |j                  d«      }| j                  t        |«      g d¢«       y )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  sz  € Ø�N‰NÓˆØ�M‰M˜"ÓˆØ×Ñœ › BÔ'Ø�M‰M˜"ÓˆØ×Ñœ › BÔ'Ø�M‰M˜"ÓˆØ×Ñœ › R¨ HÔ-Ø�M‰M˜"ÓˆØ×Ñœ ›Ò$8Ô9Ø×ÑÓ!ˆØ�M‰M˜"ÓˆØ×Ñœ › BÔ'Ø�M‰M˜"ÓˆØ×Ñœ › BÔ'Ø�M‰M˜"ÓˆØ×Ñœ › R¨ HÔ-Ø�M‰M˜"ÓˆØ×Ñœ ›¢LÔ1Ø�M‰M˜!ÓˆØ×Ñœ › BÔ'Ø�M‰M˜!ÓˆØ×Ñœ ›Ò$7Õ8r   c                 óÀ  — | j                  «       }| j                  |j                  «       g d¢g d¢f«       | j                  «       }| j                  |j                  «       g d¢g d¢f«       | j	                  «       }| j                  |j                  «       g d¢g d¢f«       | j                  «       }| j                  |j                  «       g d¢g d¢g d	¢g d
¢f«       y )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_ordera  s³   € Ø�N‰NÓˆØ�‰�a—l‘l“nÚ&ªÐ8ô	:à�N‰NÓˆØ�‰�a—l‘l“nÚ/Ò1IÐJô	Là×ÑÓ!ˆØ�‰�a—l‘l“nÚ$¢mÐ4ô	6à×ÑÓ!ˆØ�‰�a—l‘l“nÚ-Ò/EÚ-Ò/EðGõ	Hr   c                 óº   ‡ ‡— ˆˆ fd„}‰ j                  «       Š |g d¢g d¢f«        |g d¢g d¢g d¢f«       ‰ j                  «       Š |g d¢g d¢g d	¢g d
¢f«       y )Nc           
      ó|  •— ‰j                  t        ‰j                  | «      «      |«       ‰j                  t        ‰j                  | d d d…   «      «      |«       ‰j                  t        ‰j                  | d¬«      «      d d d…   |«       ‰j                  t        ‰j                  | d d d…   d¬«      «      d d d…   |«       ‰j                  j	                  | «       ‰j                  t        ‰j                  | «      «      |«       ‰j                  t        ‰j                  | d¬«      «      d d d…   |«       y )Nr   T)Úreverse)r/  ÚlistÚ	topo_sortÚrandomÚshuffle)r(  Úexpectedrà   r^   s     €€r   Úcheck_topo_sortz3TestCFGraph.test_topo_sort.<locals>.check_topo_sortq  sý   ø€ Ø�M‰Mœ$˜qŸ{™{¨5Ó1Ó2°HÔ=Ø�M‰Mœ$˜qŸ{™{¨5±°2°©;Ó7Ó8¸(ÔCØ�M‰Mœ$˜qŸ{™{¨5¸$˜{Ó?Ó@ÁÀ2ÀÑFØ"ô$à�M‰Mœ$˜qŸ{™{¨5±°2°©;À˜{ÓEÓFÁtÈÀtÑLØ"ô$à�K‰K×Ñ Ô&Ø�M‰Mœ$˜qŸ{™{¨5Ó1Ó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_sortp  s\   ù€ õ
	$ð �N‰NÓˆÙÒ(Ò+;Ð*=Ô>áÒ(Ú)Ò+;Ð<ô	>à×ÑÓ!ˆÙšÚ(ª/º?ÐKõ	Mr   c                 óÈ   — | j                  t        |«      t        |«      «       t        |«      D ]0  }| j                  t        ||   «      t        ||   «      d|›�«       Œ2 y )Nzmismatch for ©r\   r  )r^   Úgotr9  rá   s       r   Úcheck_dominatorszTestCFGraph.check_dominators†  sS   € Ø×Ñœ ›¤f¨XÓ&6Ô7Ü˜3–KˆDØ×ÑœV C¨¡IÓ.´°xÀ±~Ô0FÙ26Ð8õ:ñ  r   c                 ó–  ‡ ‡— ˆˆ fd„}‰ j                  «       ‰ j                  «       fD ]=  }|j                  «       Š |ddg«        |dddg«        |dddg«        |dddg«       Œ? ‰ j                  «       }|j                  «       Š |ddg«        |dddg«        |dddg«        |dddg«        |dg d¢«        |d	g d
¢«       y )Nc                 óB   •— ‰j                  t        ‰|    «      |«       y rR   r=  ©rÞ   ÚlÚdomsr^   s     €€r   Úeq_z1TestCFGraph.test_dominators_loopless.<locals>.eq_�  ó   ø€ Ø×ÑœV D¨¡G›_¨aÕ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Œ  sÊ   ù€ õ	1à—.‘.Ó" D×$=Ñ$=Ó$?Ó@ˆAØ—<‘<“>ˆDÙ��A�3ŒKÙ��Q˜�GÔÙ��Q˜�GÔÙ��Q˜�GÕð Að �N‰NÓˆØ�|‰|‹~ˆÙˆB��ŒÙˆB��R�ÔÙˆB��R�ÔÙˆB��R�ÔÙˆB’ÔÙˆB’Õr   c                 ó,  — | j                  «       }|j                  «       }| j                  |dgddgg d¢g d¢g d¢g d¢g d¢g d¢d	œ«       | j                  «       }|j                  «       }| j                  |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'¢“«       | j	                  «       }|j                  «       }| j                  |dgdd(gdd
gg d)¢g d*¢g d+¢d,œ«       y )-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ž  s   € Ø×ÑÓ!ˆØ�|‰|‹~ˆØ×Ñ˜dØ#$ #Ø#$ a &Ú#-Ú#1Ú#1Ú#5Ú#-Ú#-ñ!ô		"ð ×ÑÓ!ˆØ�|‰|‹~ˆØ×Ñ˜dð!˜q 1 #ð !Ø  1 a &ð!à!¢:ð!ð  "¢>ð!ð  "Ò#5ð	!ð
  "Ò#9ð!ð  "Ò#=ð!ð  "Ò#=ð!ð  "Ò#9ð!ð  "Ò#=ð!ð  "¢:ð!ð  "¢>ð!ð  "Ò#5ð!ð  "Ò#9ð!ð  "Ò#=ð!ð  "Ò#9ð!ð   "Ò#=ð!!ô	"ð& ×ÑÓ!ˆØ�|‰|‹~ˆØ×Ñ˜dØ#$ #Ø#$ a &Ø$% r 7Ú#.Ú#2Ú#2ñ!õ	"r   c                 ó’  ‡ ‡— ˆˆ fd„}‰ j                  «       ‰ j                  «       fD ]=  }|j                  «       Š |dddg«        |dddg«        |dddg«        |ddg«       Œ? ‰ j                  «       }|j                  «       Š |ddg«        |ddg«        |ddg«        |dddg«        |dddg«        |dddg«       y )	Nc                 óB   •— ‰j                  t        ‰|    «      |«       y rR   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Ë  sÑ   ù€ õ	1à—.‘.Ó" D×$=Ñ$=Ó$?Ó@ˆAØ×$Ñ$Ó&ˆDÙ��A�r�7ŒOÙ��R˜�HÔÙ��R˜�HÔÙ��R�D�Mð Að �N‰NÓˆØ× Ñ Ó"ˆÙˆB��ŒÙˆB��ŒÙˆB��ŒÙˆB��R�ÔÙˆB��R�ÔÙˆB��R�Õr   c                 ó–  — | j                  «       }|j                  «       }| j                  |ddgdgdgdgdgddgddgdgd	œ«       | j                  «       }|j                  «       }| j                  |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“«       y )"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Ý  sr  € Ø×ÑÓ!ˆØ× Ñ Ó"ˆØ×Ñ˜dØ#$ a &Ø#$ #Ø$& 4Ø$& 4Ø$& 4Ø$&¨ 8Ø$&¨ 8Ø$& 4ñ!ô		"ð ×ÑÓ!ˆØ× Ñ Ó"ˆØ×Ñ˜dð!˜qÒ"4ð !Ø ¢/ð!à!Ò#Fð!ð  "Ò#Bð!ð  "Ò#>ð	!ð
  "Ò#Bð!ð  "Ò#Bð!ð  "Ò#Bð!ð  "Ò#:ð!ð  "Ò#6ð!ð  "¢<ð!ð  " B¨ 8ð!ð  " B 4ð!ð  " B 4ð!ð  " B 4ð!ð  " B¨ 8ð!ð   " B 4ð!!õ	"r   c           
      óü   — | j                  «       }|j                  «       }| j                  |dgdgddgdgdgdgdœ«       | j                  «       }|j                  «       }| j                  |ddgdgd	gd
gdœ«       y )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„} |‰ j                  «       h d£t        «       t        «       t        «       dœ«        |‰ j                  «       t        «       t        «       ddht        «       t        «       h d£dœ«        |‰ j                  «       h d£t        «       t        «       t        «       dœ«        |‰ j	                  «       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        «       “«        |‰ j                  «       dhh d£t        «       ddhdht        «       t        «       t        «       dœ«        |‰ j                  «       d	dht        «       dhddht        «       t        «       dœ«        |‰ j                  «       dhd d!ht        «       t        «       d"œ«       y )#Nc                 óJ   •— | j                  «       }‰j                  ||«       y rR   )Údominator_treer\   )Úgraphr9  Údomtreer^   s      €r   Úcheckz.TestCFGraph.test_dominator_tree.<locals>.check  s!   ø€ Ø×*Ñ*Ó,ˆ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ñ 	ˆd�n‰nÓÚ¤C£E¬s«u¼#»%Ñ@ô	Báˆd�n‰nÓÜ“5œc›e¨"¨b¨´s³uÄ#Ã%Úñ!ô	"ñ 	ˆd×'Ñ'Ó)Ú¤C£E¬s«u¼#»%Ñ@ô	Báˆd×!Ñ!Ó#ð/ˆq�1�#ð /�q˜2˜r˜(ð / B¨¨ð /¨b°2°$ð /¸¸RÀ¸Hð /Ø�B�4ð/ØœS›Uð/Ø$&¨¨ð/Ø.0´#³%ð/Ø9;¸b¸Tð/à�B�4ð/à˜b "˜Xð/à')¨B°¨8ð/à57¼»ð/ð ”3“5ð/ð ˜r˜dð/ð %'¬«ð/ô	0ñ
 	ˆd×!Ñ!Ó#Ø�#š,¬C«E¸¸B°xØ�4œS›U¬«´3³5ñ:ô	;ñ 	ˆd×!Ñ!Ó#Ø�q�'œc›e¨"¨°B¸°8ÄÃÜ“5ñô	ñ 	ˆd×!Ñ!Ó#Ø�#˜2˜q˜'¤c£e´³Ñ7õ	9r   c                 ó  ‡ — ˆ fd„} |‰ j                  «       dddddœ«        |‰ j                  «       dddddddœ«        |‰ j                  «       dddddœ«        |‰ j                  «       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“«        |‰ j	                  «       dddddddddœ«        |‰ j                  «       ddddd	d	dœ«        |‰ j                  «       dddddœ«       y )Nc                 óJ   •— | j                  «       }‰j                  ||«       y rR   )Úimmediate_dominatorsr\   )rX  r9  Úidomsr^   s      €r   rZ  z4TestCFGraph.test_immediate_dominators.<locals>.check1  s!   ø€ Ø×.Ñ.Ó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_dominators0  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ñ 	ˆd×!Ñ!Ó#Ø�q˜a R¨R°R¸QÀAÑFô	Háˆd×!Ñ!Ó#Ø˜˜q b¨b°bÑ9ô	;áˆd×!Ñ!Ó#Ø˜˜a QÑ'õ	)r   c                 ó’  ‡ — ˆ fd„} |‰ j                  «       t        «       dhdht        «       dœ«        |‰ j                  «       dhdht        «       t        «       t        «       t        «       dœ«        |‰ j                  «       t        «       dhdht        «       dœ«        |‰ j	                  «       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        «       “«        |‰ j                  «       t        «       dhddht        «       ddhdhdht        «       dœ«        |‰ j                  «       t        «       t        «       t        «       dhdhdhdœ«        |‰ j                  «       t        «       dhdhdhdœ«       y )Nc                 óJ   •— | j                  «       }‰j                  ||«       y rR   )Údominance_frontierr\   )rX  r9  Údfr^   s      €r   rZ  z2TestCFGraph.test_dominance_frontier.<locals>.checkG  s!   ø€ Ø×)Ñ)Ó+ˆ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_frontierF  s  ø€ ô	+ñ 	ˆd�n‰nÓÜ“%˜b˜T¨ t´³Ñ7ô	9áˆd�n‰nÓØ�4˜b˜T¤s£u´#³%¼S»UÌËÑNô	Páˆd×'Ñ'Ó)Ü“%˜b˜T¨ t´³Ñ7ô	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ðDà�B�4ðDà˜b˜TðDà#%¤s£uðDà.0´#³%ðDà9;¼S»UðDô	Eñ 	ˆd×!Ñ!Ó#Ü“%˜Q˜C b¨! W´#³%Ø˜�7  ¨2¨$´C³Eñ;ô	<ñ 	ˆd×!Ñ!Ó#Ü“%œC›E¤s£u°2°$¸R¸DÀrÀdÑKô	Máˆd×!Ñ!Ó#Ü“%˜Q˜C Q C¨a¨SÑ1õ	3r   c                 ó  — | j                  «       | j                  «       fD ]-  }| j                  t        |j	                  «       «      ddg«       Œ/ | j                  «       }| j                  t        |j	                  «       «      ddg«       y )Nr   rè   rù   )rî   rô   r\   r  Úbackbonerú   rí   s     r   Útest_backbone_looplessz"TestCFGraph.test_backbone_loopless]  sl   € Ø—.‘.Ó" D×$=Ñ$=Ó$?Ó@ˆAØ×ÑœV A§J¡J£LÓ1°A°r°7Õ;ð Aà�N‰NÓˆØ×Ñœ §
¡
£Ó-°°B¨xÕ8r   c                 ód  — | j                  «       }| j                  t        |j                  «       «      g d¢«       | j	                  «       }| j                  t        |j                  «       «      dg«       | j                  «       }| j                  t        |j                  «       «      ddg«       y )N)r   rž   rü   r  r  r   rE   )r
  r\   r  rk  r  r  rí   s     r   Útest_backbone_loopszTestCFGraph.test_backbone_loopsc  s„   € Ø×ÑÓ!ˆØ×Ñœ §
¡
£Ó-Ò/AÔBØ×ÑÓ!ˆØ×Ñœ §
¡
£Ó-°¨sÔ3Ø×ÑÓ!ˆØ×Ñœ §
¡
£Ó-°°1¨vÕ6r   c                 óV  — | j                  «       | j                  «       | j                  «       fD ]+  }| j                  t	        |j                  «       «      d«       Œ- | j                  «       }| j                  t        |j                  «       «      g d¢«       |j                  «       d   }|j                  «       d   }|j                  «       d   }| j                  |j                  d«       | j                  t        |j                  «      dg«       | j                  t        |j                  «      dg«       | j                  t        |j                  «      g d¢«       | j                  |j                  d«       | j                  t        |j                  «      dg«       | j                  t        |j                  «      d	g«       | j                  t        |j                  «      g d
¢«       | j                  |j                  d«       | j                  t        |j                  «      dg«       | j                  t        |j                  «      ddg«       | j                  t        |j                  «      ddg«       dD ]#  }| j                  |j                  |«      g «       Œ% dD ]$  }| j                  |j                  |«      |g«       Œ& d
D ]%  }| j                  |j                  |«      ||g«       Œ' dD ]$  }| j                  |j                  |«      |g«       Œ& | j                  «       }| j                  t        |j                  «       «      dg«       |j                  «       d   }| j                  |j                  d«       | j                  t        |j                  «      dg«       | j                  t        |j                  «      g «       | j                  t        |j                  «      g d¢«       dD ]#  }| j                  |j                  |«      g «       Œ% dD ]$  }| j                  |j                  |«      |g«       Œ& | j                  «       }| j                  t        |j                  «       «      dg«       |j                  «       d   }| j                  |j                  d«       | j                  t        |j                  «      dg«       | j                  t        |j                  «      g «       | j                  t        |j                  «      g d¢«       dD ]#  }| j                  |j                  |«      g «       Œ% dD ]$  }| j                  |j                  |«      |g«       Œ& | j                  «       }| j                  t        |j                  «       «      dg«       |j                  «       d   }| j                  |j                  d«       | j                  t        |j                  «      dg«       | j                  t        |j                  «      g d¢«       | j                  t        |j                  «      g d¢«       dD ]#  }| j                  |j                  |«      g «       Œ% dD ]$  }| j                  |j                  |«      |g«       Œ& y )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_loopsk  s  € Ø—.‘.Ó" D×$=Ñ$=Ó$?Ø—.‘.Ó"ó$ˆAà×ÑœS §¡£›^¨QÕ/ð$ð ×ÑÓ!ˆà×Ñœ §¡£	Ó*ªKÔ8Ø—‘“˜1‘ˆØ—‘“˜2‘ˆØ—‘“˜2‘ˆØ×Ñ˜Ÿ™¨Ô*Ø×Ñœ §¡Ó/°!°Ô5Ø×Ñœ §¡Ó-°¨tÔ4Ø×Ñœ §¡Ó,Ú<ô	>à×Ñ˜Ÿ™¨Ô+Ø×Ñœ §¡Ó/°"°Ô6Ø×Ñœ §¡Ó-°¨tÔ4Ø×Ñœ §¡Ó,Ò.>Ô?Ø×Ñ˜Ÿ™¨Ô+Ø×Ñœ §¡Ó/°"°Ô6Ø×Ñœ §¡Ó-°°B¨xÔ8Ø×Ñœ §¡Ó,¨r°2¨hÔ7Û+ˆDØ×Ñ˜QŸZ™Z¨Ó-¨rÕ2ð ,ã'ˆDØ×Ñ˜QŸZ™Z¨Ó-°¨xÕ8ð (ã$ˆDØ×Ñ˜QŸZ™Z¨Ó-°¸Ð/?Õ@ð %ãˆDØ×Ñ˜QŸZ™Z¨Ó-°¨xÕ8ð ð ×ÑÓ!ˆà×Ñœ §¡£	Ó*¨R¨DÔ1Ø�w‰w‹y˜‰}ˆØ×Ñ˜Ÿ™ bÔ)Ø×Ñœ §¡Ó-°¨tÔ4Ø×Ñœ §
¡
Ó+¨RÔ0Ø×Ñœ §	¡	Ó*ªLÔ9ÛˆDØ×Ñ˜QŸZ™Z¨Ó-¨rÕ2ð ã ˆDØ×Ñ˜QŸZ™Z¨Ó-°¨vÕ6ð !ð ×ÑÓ!ˆà×Ñœ §¡£	Ó*¨Q¨CÔ0Ø�w‰w‹y˜‰|ˆØ×Ñ˜Ÿ™ aÔ(Ø×Ñœ §¡Ó-°¨sÔ3Ø×Ñœ §
¡
Ó+¨RÔ0Ø×Ñœ §	¡	Ó*ªJÔ7ÛˆDØ×Ñ˜QŸZ™Z¨Ó-¨rÕ2ð ãˆDØ×Ñ˜QŸZ™Z¨Ó-°¨vÕ6ð ð ×ÑÓ!ˆà×Ñœ §¡£	Ó*¨Q¨CÔ0Ø�w‰w‹y˜‰|ˆØ×Ñ˜Ÿ™ aÔ(Ø×Ñœ §¡Ó-°¨sÔ3Ø×Ñœ §
¡
Ó+ª\Ô:Ø×Ñœ §	¡	Ó*ªKÔ8Û#ˆDØ×Ñ˜QŸZ™Z¨Ó-¨rÕ2ð $ãˆDØ×Ñ˜QŸZ™Z¨Ó-°¨vÕ6ñ  r   c                 ó  — | j                  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?œ¥«      }|j                  d«       |j                  «        i }|j	                  |¬@«      }| j                  |dAdBh«       | j                  |dC   dD«       y )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ˆ
Ø×Ñ˜ j°*Ð%=Ô>Ø×Ñ˜Ð0Ñ1°3Õ7r   c                 ó  ‡ — ˆ fd„} |«       } |«       }‰ j                  ||«       ‰ j                  ddgdgg dgdœ«      }|j                  d«       |j                  «        ‰ j                  ||«        |«       }|j                  d«       |j                  «        ‰ j	                  ||«       ‰ j                  ddgdgdgdgg dœ«      }|j                  d«       |j                  «        ‰ j	                  ||«       ‰ j                  ddgdgg d	œ«      }|j                  d«       |j                  «        ‰ j                  ddgdgg d	œ«      }|j                  d«       |j                  «        ‰ j	                  ||«       y )
Nc                  ó~   •— ‰j                  ddgdgdgg dœ«      } | j                  d«       | j                  «        | S )Nræ   rç   rè   ré   r   rê   )rà   r^   s    €r   Úget_newz(TestCFGraph.test_equals.<locals>.get_newÿ  s@   ø€ Ø×"Ñ"¨¨B x°b°TÀ¸tÈÑ#LÓMˆAØ×Ñ˜aÔ Ø�I‰IŒ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ý  sq  ø€ ô	ñ ‹IˆÙ‹Iˆð 	×Ñ˜˜AÔð ×Ñ B¨ 8°"°¸2ÀBÀ4ÑHÓIˆØ	×Ñ˜!ÔØ	�	‰	ŒØ×Ñ˜˜AÔñ ‹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Ù   x  s�   „ ñóò
òò&ò&#òJò4ò$òOò<ò *ò,9ò0HòMò,:òò$+"òZò$!"òF"ò,9ò4)ò,3ò.9ò7òF7òPH8óT("r   rÙ   c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)Ú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                 ó<   — t        |«      }|j                  «        |S rR   )r   Úrun)r^   ÚbcÚcfas      r   r¯  zTestRealCodeDomFront.cfa4  s   € Ü! "Ó%ˆØ�‰Œ	Øˆ
r   c                 ó’   — t        j                  |«      }t        |¬«      }| j                  |«      }| j	                  ||«      }||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_namedblocks9  sH   € Ü×,Ñ,¨RÓ0ˆÜ˜cÔ"ˆØ�h‰h�r‹lˆØ×,Ñ,¨R°Ó5ˆð �KÐÐr   c                 óÆ  — i }t        |j                  «       D �cg c]  }|j                  ‘Œ c}«      }d}|D ]¡  }|j                  dk(  sŒ|j                  t        |j                  «         }|j                  |«      sŒG|t        |«      d }	t        ||dd |d   dz   gz   «      D ]  \  }
}|
|j                  cxk  r|k  sŒn Œ n t        d«      ‚|
}|||	<   Œ£ |S c c}w )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.
        Ú
SET_BLOCK_ÚLOAD_GLOBALNr%   r   zunreachable loop)r  Ú
iterblocksÚoffsetÚopnameÚco_namesr	   ÚargÚ
startswithr&  ÚzipÚAssertionError)r^   r®  r¯  r¶  r   ÚblocksÚprefixÚinstÚgvÚnameÚsrg   Úblknos                r   r³  z&TestRealCodeDomFront._scan_namedblocksL  sè   € ð
 ˆÜ¨3¯>©>Ô+;Ó<Ñ+; a˜Ÿ›Ð+;Ñ<Ó=ˆØˆãˆDà�{‰{˜mÓ+Ø—[‘[Ô!5°d·h±hÓ!?Ñ@�Ø—=‘= Õ(Øœc &›k˜lÐ+�Dä # F¨F°1°2¨J¸&À¹*Àq¹.Ð9IÑ,IÖ J™˜˜1Ø §¡Ô/¨aÖ/Ù!ð !Kô -Ð-?Ó@Ð@Ø�EØ(-�K Ò%ð ð Ðùò# =s   šCc                 óÂ   — d„ }| j                  |«      \  }}|j                  j                  «       }| j                  ||d      «       | j                  ||d      «       y )Nc                 ó`   — d}t          d}t        rt         |dz  }|dz  }t        rŒt         |S r(   )ÚSET_BLOCK_AÚSET_BLOCK_B0ÚSET_BLOCK_B1ÚSET_BLOCK_C)ÚnÚcr   s      r   Úfooz+TestRealCodeDomFront.test_loop.<locals>.foof  s6   € ØˆAÝØˆAÝÝØ�Q‘�Ø�Q‘�ö õ ØˆHr   ÚAÚC)r·  rX  rg  ÚassertFalse©r^   rÒ  r¯  ÚblkptsÚdomfronts        r   Ú	test_loopzTestRealCodeDomFront.test_loope  s_   € ò		ð ×2Ñ2°3Ó7‰ˆˆVð
 —9‘9×/Ñ/Ó1ˆØ×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜ &¨¡+Ñ.Õ/r   c                 ób  — d„ }| j                  |«      \  }}| j                  |d   |d   «       |j                  j                  «       }| j	                  ||d      «       | j	                  ||d      «       | j                  |d   h||d      «       | j                  |d   h||d	      «       y )
Nc                 óª   — t          t        rAt         t        r(t         t
        rt         n| rt         t         t        rŒ(t         t        rŒAt         y rR   )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{  s7   € ÝÝÝÝ"Ý Ý#Ý$ØÙÝ$Ýö #õ ö ö r   ÚD0ÚC1rÓ  ÚGÚFÚD1ÚEÚD2)r·  r\   rX  rg  rÕ  rÖ  s        r   Útest_loop_nested_and_breakz/TestRealCodeDomFront.test_loop_nested_and_breakz  s·   € ò	ð ×2Ñ2°3Ó7‰ˆˆVØ×Ñ˜ ™ v¨d¡|Ô4ð —9‘9×/Ñ/Ó1ˆØ×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜ &¨¡+Ñ.Ô/ð 	×Ñ˜& ™+˜¨°¸±Ñ(>Ô?Ø×Ñ˜& ™+˜¨°¸±Ñ(>Õ?r   c                 ó¶  — d„ }| j                  |«      \  }}|j                  j                  «       }| j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d	      «       |j                  j	                  «       }| j                  ||d      «       | j                  ||d      «       | j                  ||d	      «       | j                  |d   h||d      «       | j                  |d   h||d      «       | j                  |d   h||d      «       | j                  |d   h||d      «       | j                  |d	   h||d      «       y )
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—  sN   € ØˆAÝØ�1ŠuÝØ‘ÝÝØ‘åØ�åØ�1‰u˜ŠzÝØ�Q‘�ÝØˆHr   rÓ  ÚBÚC0rå  ÚDré  rç  ræ  ©r·  rX  ra  r\   rg  rÕ  ©r^   rÒ  r¯  r×  rb  rØ  s         r   Útest_if_elsez!TestRealCodeDomFront.test_if_else–  sì  € ò	ð( ×2Ñ2°3Ó7‰ˆˆVà—	‘	×.Ñ.Ó0ˆØ×Ñ˜ ™ e¨F°3©KÑ&8Ô9Ø×Ñ˜ ™ e¨F°4©LÑ&9Ô:Ø×Ñ˜ ™ u¨V°D©\Ñ':Ô;Ø×Ñ˜ ™ u¨V°C©[Ñ'9Ô:Ø×Ñ˜ ™ e¨F°3©KÑ&8Ô9Ø×Ñ˜ ™ e¨F°3©KÑ&8Ô9Ø×Ñ˜ ™ e¨F°3©KÑ&8Ô9à—9‘9×/Ñ/Ó1ˆØ×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜& ™+˜¨°¸±Ñ(=Ô>Ø×Ñ˜& ™+˜¨°¸±Ñ(>Ô?Ø×Ñ˜& ™+˜¨°¸±Ñ(>Ô?Ø×Ñ˜& ™+˜¨°¸±Ñ(=Ô>Ø×Ñ˜& ™+˜¨°¸±Ñ(=Õ>r   c                 ó  — d„ }| j                  |«      \  }}|j                  j                  «       }| j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       | j                  |d   ||d      «       |j                  j	                  «       }| j                  ||d      «       | j                  ||d      «       | j                  |d   h||d      «       | j                  |d   h||d	      «       | j                  |d   h||d      «       | j                  |d   h||d      «       y )
Nc                  óŽ   — t         r8t         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Á  s4   € ÝÝÝÝ Ø‘Aå#Ý$Ø™å$Ø˜ÝÝÝØˆ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‰ˆˆVà—	‘	×.Ñ.Ó0ˆØ×Ñ˜ ™ u¨V°D©\Ñ':Ô;Ø×Ñ˜ ™ u¨V°D©\Ñ':Ô;Ø×Ñ˜ ™ u¨V°D©\Ñ':Ô;Ø×Ñ˜ ™ u¨V°C©[Ñ'9Ô:Ø×Ñ˜ ™ u¨V°C©[Ñ'9Ô:Ø×Ñ˜ ™ u¨V°C©[Ñ'9Ô:à—9‘9×/Ñ/Ó1ˆØ×Ñ˜ &¨¡,Ñ/Ô0Ø×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜& ™+˜¨°¸±Ñ(>Ô?Ø×Ñ˜& ™+˜¨°¸±Ñ(>Ô?Ø×Ñ˜& ™+˜¨°¸±Ñ(=Ô>Ø×Ñ˜& ™+˜¨°¸±Ñ(=Õ>r   c                 óö  — d„ }| j                  |«      \  }}|j                  j                  «       }| j                  d|«       | j	                  |d   ||d      «       | j	                  |d   ||d      «       |j                  j                  «       }| j                  ||d      «       | j                  ||d      «       | j	                  |d   h||d      «       | j	                  |d   h||d      «       y )Nc                  ó8   — t          	 t        rt         y t         ŒrR   )rÌ  rî  rÏ  rï  rá  r    r   r   rÒ  z4TestRealCodeDomFront.test_infinite_loop.<locals>.fooæ  s   € ÝØÝÝØÝð	 r   ré  rñ  rÔ  ró  rÓ  )r·  rX  ra  ÚassertNotInr\   rg  rÕ  rõ  s         r   Útest_infinite_loopz'TestRealCodeDomFront.test_infinite_loopå  sù   € ò	ð ×2Ñ2°3Ó7‰ˆˆVà—	‘	×.Ñ.Ó0ˆð 	×Ñ˜˜fÔ%Ø×Ñ˜ ™ e¨F°3©KÑ&8Ô9Ø×Ñ˜ ™ e¨F°3©KÑ&8Ô9à—9‘9×/Ñ/Ó1ˆØ×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜ &¨¡+Ñ.Ô/Ø×Ñ˜& ™+˜¨°¸±Ñ(=Ô>Ø×Ñ˜& ™+˜¨°¸±Ñ(=Õ>r   N)rÔ   rÕ   rÖ   r©  r¯  r·  r³  rÙ  rë  rö  rÿ  r  r    r   r   r«  r«  (  s2   „ ñ
òò
 ò&ò20ò*@ò8(?òT#?óJ?r   r«  Ú__main__),rY   ÚunittestÚnumbar   Únumba.core.controlflowr   r   Ú
numba.corer   Únumba.core.bytecoder   r   r	   Únumba.tests.supportr
   r×   rq   r   r   r"   r&   r)   r+   r-   r/   r3   r5   r7   r:   r<   r>   r@   rC   rF   rH   rK   rM   rP   rT   rV   rÙ   r«  rÔ   Úmainr    r   r   Ú<module>r     sâ   ðÛ ã Ý ß ?Ý ß PÑ PÝ (àÐ à¨DÑ1€òòòòòòòòòòòòò	òòòòòòò
$òò ô]=�hô ]=ô@m
"�(ô m
"ô`T?˜8ô T?ðn ˆzÒØ€H‡M�M…Oð r   