ó
\K]c           @  s  d  d l  m Z d  d l Z d  d l j Z d  d l m Z m Z d  d l	 m
 Z
 m Z d  d l m Z m Z d  d l m Z m Z d  d l m Z d d	 l m Z m Z e ƒ  Z e j d
 ƒ e ƒ  Z e j d ƒ e ƒ  Z e j 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" „  Z0 d# e f d$ „  ƒ  YZ1 d% e f d& „  ƒ  YZ2 d' e f d( „  ƒ  YZ3 e4 d) k re j5 ƒ  n  d S(*   iÿÿÿÿ(   t   print_functionN(   t   CFGrapht   ControlFlowAnalysis(   t   compile_isolatedt   Flags(   t   typest   errors(   t   FunctionIdentityt   ByteCode(   t   IS_PY3i   (   t   TestCaset   tagt   enable_pyobjectt   force_pyobjectt   nrtc         C  s+   d } x t  |  ƒ D] } | | 7} q W| S(   Ni    (   t   range(   t   xt   yt   resultt   i(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase1   s    c         C  sA   d } x4 t  t |  | d ƒ ƒ D] \ } } | | | 7} q W| S(   Ni    iÿÿÿÿ(   t	   enumerateR   (   R   R   R   R   t   j(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase2   s    %c         C  s1   d } |  | g } x | D] } | | 7} q W| S(   Ni    (    (   R   R   R   t   lstR   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase3%   s
    c         C  sB   d } x5 t  d ƒ D]' } x t  d ƒ D] } | d 7} q& Wq W| S(   Ni    i
   i   (   R   (   R   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase4-   s
    c         C  s;   d } x. t  |  ƒ D]  } | d 7} | | k r Pq q W| S(   Ni    i   (   R   (   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase55   s    
c         C  s=   d } x0 t  |  ƒ D]" } | | k r+ q n  | d 7} q W| S(   Ni    i   (   R   (   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase6>   s    c         C  s9   x2 t  |  ƒ D]$ } d }  x t  |  ƒ D] } d SWq Wd S(   Ni    i   (   R   (   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase7G   s    c         C  s9   d } x, t  |  | | |  d ƒ D] } | d 7} q! W| S(   Ni    i   (   R   (   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase8Q   s    !c         C  sf   d } xY t  |  ƒ D]K } d }  x< t  |  ƒ D]$ } | |  d k r, | | 7} Pq, q, W| | 7} q W| S(   Ni    i   (   R   (   R   R   t   zR   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase9X   s    
c         C  s;   x4 t  |  ƒ D] } | | k r | } Pq q W| d } | S(   Ni   (   R   (   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   for_loop_usecase10f   s    
c         C  s7   d } d } x$ | |  k  r2 | | 7} | d 7} q W| S(   Ni    i   (    (   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   while_loop_usecase1p   s    
c         C  s'   d } x | |  k r" | d 7} q	 W| S(   Ni    i   (    (   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   while_loop_usecase2y   s    c         C  s^   d } d } d } xE | |  k  rY x2 | | k  rU | | | 7} | d 7} | d 7} q$ Wq W| S(   Ni    i   (    (   R   R   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   while_loop_usecase3€   s    
c         C  s1   d } x$ t  r, | d 7} | |  k r	 Pq	 q	 W| S(   Ni    i   (   t   True(   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   while_loop_usecase4Œ   s    	
c         C  sC   d } x6 | |  k  r> | | k r1 | d 7} q	 n  | d 7} q	 W| S(   Ni    i   i   (    (   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   while_loop_usecase5•   s    
c         C  s"   |  d k r n | d k r n  t  S(   Ni    (   R%   (   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   ifelse_usecase1Ÿ   s
    c         C  s4   |  | k r d S|  d k s( | d k r, d Sd Sd  S(   Ni   i    i   i   (    (   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   ifelse_usecase2©   s
    c         C  sK   |  d k r3 | d k r d S| d k  r, d Sd Sn |  d k  rC d Sd Sd  S(   Ni    i   (    (   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   ifelse_usecase3²   s    c         C  s   |  | k r d Sd  S(   Ni   (    (   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   ifelse_usecase4À   s    c         C  s   |  | k r t  St S(   N(   R%   t   False(   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   ternary_ifelse_usecase1Å   s    c         C  sh   |  } | } xO t  r] x( t  r? | | d k r2 Pn  | d 7} q W| d 7} | | k r Pq q W| | f S(   Ni   (   R%   (   R   R   t   LR   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   double_infinite_loopÉ   s    		
c           C  s   y Wn t  k
 r n Xd  S(   N(   t	   Exception(    (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   try_except_usecaseÙ   s    t   TestFlowControlc           B  s–  e  Z e d  „ Z e d „ Z e d ƒ d „  ƒ Z e d „ Z e d ƒ d „  ƒ Z e d „ Z	 d „  Z
 e d „ Z e d ƒ d	 „  ƒ Z e d
 „ Z e d ƒ d „  ƒ Z e d „ Z e d ƒ d „  ƒ Z e d „ Z e d ƒ d „  ƒ Z e d „ Z e d ƒ d „  ƒ Z e d „ Z e d ƒ d „  ƒ Z e d „ Z e d ƒ d „  ƒ Z e d „ Z d „  Z e d „ Z d „  Z e d „ Z e d ƒ d „  ƒ Z e d „ Z e d ƒ d „  ƒ Z  e d „ Z! e d ƒ d „  ƒ Z" e d  „ Z# d! „  Z$ e d" „ Z% e d ƒ d# „  ƒ Z& e d$ „ Z' e d ƒ d% „  ƒ Z( e d& „ Z) e d ƒ d' „  ƒ Z* e d( „ Z+ e d ƒ d) „  ƒ Z, e d* „ Z- d+ „  Z. d, „  Z/ RS(-   c         C  s  t  | t j t j f d | ƒ} | j } xè t j | | ƒ D]Ô \ } } d  }	 d  }
 y | | | ƒ } Wn t k
 rƒ } | }	 n Xy | | | ƒ } WnG t k
 rà } |	 d  k r» ‚  n  | }
 |  j t	 |	 ƒ t	 |
 ƒ ƒ q= X|	 d  k	 r|  j
 d |	 ƒ n  |  j | | ƒ q= Wd  S(   Nt   flagss(   Invalid for pure-python but numba works
(   R   R   t   intpt   entry_pointt	   itertoolst   productt   NoneR0   t   assertEqualt   typet   fail(   t   selft   pyfunct
   x_operandst
   y_operandsR3   t   crt   cfuncR   R   t   pyerrt   cerrt   pyrest   et   cres(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   run_testâ   s(    !	
 	c         C  s)   |  j  t d d d g d g d | ƒd  S(   Niöÿÿÿi    i
   R3   (   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop1û   s    t	   importantc         C  s   |  j  d t ƒ d  S(   NR3   (   RH   t   no_pyobj_flags(   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop1_npmþ   s    c         C  s/   |  j  t d d d g d d d g d | ƒd  S(   Niöÿÿÿi    i
   R3   (   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop2  s    $c         C  s   |  j  d t ƒ d  S(   NR3   (   RL   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop2_npm  s    c         C  s#   |  j  t d g d g d | ƒd S(   s(   
        List requires pyobject
        i   i   R3   N(   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop3
  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   RN   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop3_npm  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Ni
   R3   (   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop4  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   RP   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop4_npm  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Nid   i2   R3   (   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop5  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   RR   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop5_npm  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Nid   i2   R3   (   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop6"  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   RT   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop6_npm%  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Ni   i    R3   (   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop7)  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   RV   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop7_npm,  s    c         C  s,   |  j  t d d g d d d g d | ƒd  S(   Ni    i   i   i
   R3   (   RG   R   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop80  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   RX   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop8_npm3  s    c         C  s,   |  j  t d d g d d d g d | ƒd  S(   Ni    i   i   i
   R3   (   RG   R    (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop97  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   RZ   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop9_npm:  s    c         C  s&   |  j  t d g d d g d | ƒd  S(   Ni   i   i   R3   (   RG   R!   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop10>  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   R\   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_for_loop10_npmA  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Ni
   i    R3   (   RG   R"   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop1E  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   R^   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop1_npmH  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Ni
   i    R3   (   RG   R#   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop2K  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   R`   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop2_npmN  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Ni
   R3   (   RG   R$   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop3Q  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rb   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop3_npmT  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Ni
   i    R3   (   RG   R&   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop4X  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rd   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop4_npm[  s    c         C  s/   |  j  t d d d g d d d g d | ƒd  S(   Ni    i   i
   R3   (   RG   R'   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop5_  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rf   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_while_loop5_npmb  s    c         C  s/   |  j  t d d d g d d d g d | ƒd  S(   Niÿÿÿÿi    i   R3   (   RG   R(   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse1f  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rh   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse1_npmi  s    c         C  s/   |  j  t d d d g d d d g d | ƒd  S(   Niÿÿÿÿi    i   R3   (   RG   R)   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse2l  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rj   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse2_npmo  s    c         C  s/   |  j  t d d d g d d d g d | ƒd  S(   Niÿÿÿÿi    i   R3   (   RG   R*   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse3s  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rl   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse3_npmv  s    c         C  s/   |  j  t d d d g d d d g d | ƒd  S(   Niÿÿÿÿi    i   R3   (   RG   R+   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse4z  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rn   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ifelse4_npm}  s    c         C  s/   |  j  t d d d g d d d g d | ƒd  S(   Niÿÿÿÿi    i   R3   (   RG   R-   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ternary_ifelse1  s    $c         C  s   |  j  d t ƒ d  S(   NR3   (   Rp   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_ternary_ifelse1_npm…  s    c         C  s#   |  j  t d g d g d | ƒd  S(   Ni
   i    R3   (   RG   R/   (   R<   R3   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_double_infinite_loop‰  s    c         C  s   |  j  d t ƒ d  S(   NR3   (   Rr   RJ   (   R<   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_double_infinite_loop_npm  s    c      
   C  sn   t  } xa t t g D]S } |  j t j ƒ  } t | d d | ƒWd  QXd } |  j | t | j	 ƒ ƒ q Wd  S(   NR3   s.   Use of unsupported opcode (SETUP_EXCEPT) found(    (
   R1   RJ   t   enable_pyobj_flagst   assertRaisesR   t   UnsupportedErrorR   t   assertInt   strt	   exception(   R<   R=   t   fRE   t   msg(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_try_except_raises  s    (0   t   __name__t
   __module__Rt   RG   RH   R   RK   RL   RM   RN   RO   RP   RQ   RR   RS   RT   RU   RV   RW   RX   RY   RZ   R[   R\   R]   R^   R_   R`   Ra   Rb   Rc   Rd   Re   Rf   Rg   Rh   Ri   Rj   Rk   Rl   Rm   Rn   Ro   Rp   Rq   Rr   Rs   R|   (    (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyR2   à   sX   					t   TestCFGraphc           B  sû   e  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 RS(   s3   
    Test the numba.controlflow.CFGraph class.
    i    c         C  si   t  ƒ  } x | D] } | j | ƒ q Wx; | j ƒ  D]- \ } } x | D] } | j | | ƒ qG Wq4 W| S(   sG   
        Build a CFGraph class from a dict of adjacency lists.
        (   R   t   add_nodet   itemst   add_edge(   R<   t   dR5   t   gt   nodet   destst   dest(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   from_adj_listž  s    	c         C  sR   |  j  i d d g d 6d g d 6d g d 6g  d 6ƒ } | j d ƒ | j ƒ  | S(   s“   
        A simple CFG corresponding to the following code structure:

            c = (... if ... else ...) + ...
            return b + c
        i   i   i    i   (   Rˆ   t   set_entry_pointt   process(   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt	   loopless1«  s    7
c         C  s}   |  j  i d d g d 6d g d 6d g d 6g  d 6d d g d 6d d g d 6d g d 6g  d 6ƒ } | j d ƒ | j ƒ  | S(	   sc   
        Same as loopless1(), but with added dead blocks (some of them
        in a loop).
        i   i   i    i   i[   i]   i\   i^   (   Rˆ   R‰   RŠ   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   loopless1_dead_nodes·  s    



c         C  sf   |  j  i d d g d 6d g d 6d g d 6d d g d 6g  d 6g  d 6ƒ } | j d ƒ | j ƒ  | S(   sA  
        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.
        i   i   ic   i   i*   i"   (   Rˆ   R‰   RŠ   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt	   loopless2Ê  s
    E
c         C  sÝ   |  j  i d g d 6d d g d 6d g d 6d g d 6d d g d 6d	 d
 g d 6d g d	 6d g d
 6d g d 6d g d 6d g d 6d g d 6d d g d 6d d g d 6g  d 6d g d 6g  d 6ƒ } | j d ƒ | j ƒ  | S(   s^  
        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 ...
        i   i    i
   i<   i   i   i8   i   i    i,   i9   i=   iD   iW   iG   iP   iX   (   Rˆ   R‰   RŠ   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   multiple_loopsÝ  s(    









c         C  s}   |  j  i d g d 6d d g d 6d d g d 6g  d 6d d g d 6d g d 6d g d 6g  d 6ƒ } | j d ƒ | j ƒ  | S(	   s  
        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
        i   i    i
   i$   i   i   i   i%   (   Rˆ   R‰   RŠ   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   multiple_exits  s    


c         C  si   |  j  i d d g d 6g  d 6d g d 6d d g d 6d g d 6d g d 6ƒ } | j d ƒ | j ƒ  | S(   sç   
        A CFG with a infinite loop and an alternate exit point:

            if c:
                return
            while True:
                if a:
                    ...
                else:
                    ...
        i
   i   i    i   i   i   (   Rˆ   R‰   RŠ   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   infinite_loop1  s
    H
c         C  sU   |  j  i d g d 6d d g d 6d g d 6d g d 6ƒ } | j d ƒ | j ƒ  | S(   s§   
        A CFG with no exit point at all:

            while True:
                if a:
                    ...
                else:
                    ...
        i   i    i   i	   (   Rˆ   R‰   RŠ   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   infinite_loop2.  s    
:
c         C  s˜   |  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 ƒ d  S(	   Ni    i   i   i   (   i   N(   i   N(   i   N(   i   N(   R‹   R9   t   sortedt
   successorsR8   t   predecessors(   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_simple_properties=  s
    %c         C  s7  |  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 ƒ d  S(	   Ni   i"   i*   iP   iX   i   i   i%   (
   R‹   R9   R’   t   exit_pointsRŒ   R   RŽ   R   R‘   R   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_exit_pointsD  s    ""c         C  s~  |  j  ƒ  } |  j t | j ƒ  ƒ d ƒ |  j t | j ƒ  ƒ d d d d g ƒ |  j ƒ  } |  j t | j ƒ  ƒ d ƒ |  j t | j ƒ  ƒ d d d d d d g ƒ |  j ƒ  } |  j t | j ƒ  ƒ d ƒ |  j ƒ  } |  j t | j ƒ  ƒ d ƒ |  j	 ƒ  } |  j t | j ƒ  ƒ d ƒ |  j
 ƒ  } |  j t | j ƒ  ƒ d d	 d
 d g ƒ |  j t | j ƒ  ƒ d d d d g ƒ d  S(   Ni    i   i   i   i"   i*   ic   i[   i\   i]   i^   (   R‹   R9   t   lent
   dead_nodesR’   t   nodesR   RŽ   R   R   RŒ   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_dead_nodesT  s&    c         C  sÁ  |  j  ƒ  } | j d ƒ } |  j t | ƒ g  ƒ | j d ƒ } |  j t | ƒ g  ƒ | j d ƒ } |  j t | ƒ d d g ƒ | j d ƒ } |  j t | ƒ d d d d d g ƒ |  j ƒ  } | j d ƒ } |  j t | ƒ g  ƒ | j d ƒ } |  j t | ƒ g  ƒ | j d	 ƒ } |  j t | ƒ d d g ƒ | j d
 ƒ } |  j t | ƒ d	 d d g ƒ | j d ƒ } |  j t | ƒ g  ƒ | j d ƒ } |  j t | ƒ d d
 d	 d d g ƒ d  S(   Ni"   i*   i   ic   i   i   i   i   i   i
   i   i    (   R   t   descendentsR9   R’   R   (   R<   R„   Rƒ   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_descendentsj  s,    %c         C  sF  |  j  ƒ  } |  j | j ƒ  d d d d g d d d d g f ƒ |  j ƒ  } |  j | j ƒ  d d d d d d g d d d d d d g f ƒ |  j ƒ  } |  j | j ƒ  d d d	 d
 g d d d
 d	 g f ƒ |  j ƒ  } |  j | j ƒ  d d d d d d g d d d d d d g d d d d d d g d d d d d d g f ƒ d  S(   Ni    i   i   i   ic   i"   i*   i   i	   i   i   i
   i   i   i   (   R‹   Rw   t
   topo_orderR   R‘   R   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_topo_order‚  s    %1%*c           sÓ   ‡  ‡ f d †  } ˆ j  ƒ  ‰  | d d d d g d d d d g f ƒ | d d d d g d d d d g d d d d g f ƒ ˆ j ƒ  ‰  | d d	 d
 d g d
 d	 d d g d
 d	 d d g d
 d d	 d g f ƒ d  S(   Nc           s!  ˆ j  t ˆ  j |  ƒ ƒ | ƒ ˆ j  t ˆ  j |  d  d  d … ƒ ƒ | ƒ ˆ j  t ˆ  j |  d t ƒƒ d  d  d … | ƒ ˆ j  t ˆ  j |  d  d  d … d t ƒƒ d  d  d … | ƒ ˆ j j |  ƒ ˆ j  t ˆ  j |  ƒ ƒ | ƒ ˆ j  t ˆ  j |  d t ƒƒ d  d  d … | ƒ d  S(   Niÿÿÿÿt   reverse(   Rw   t   listt	   topo_sortR%   t   randomt   shuffle(   Rš   t   expected(   R„   R<   (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   check_topo_sort’  s    ,+8+i   ic   i   i"   i   i*   i   i
   i   i$   (   R   R   (   R<   R¦   (    (   R„   R<   s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_topo_sort‘  s    (%c         C  se   |  j  t | ƒ t | ƒ ƒ xB t | ƒ D]4 } |  j  t | | ƒ t | | ƒ d | f ƒ q) Wd  S(   Ns   mismatch for %r(   R9   R’   (   R<   t   gotR¥   R…   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   check_dominators§  s     c           s  ‡  ‡ f d †  } xu ˆ j  ƒ  ˆ j ƒ  g D][ } | j ƒ  ‰  | d d g ƒ | d d d g ƒ | d d d g ƒ | d d d g ƒ q+ Wˆ j ƒ  } | j ƒ  ‰  | d d g ƒ | d d d g ƒ | d d d g ƒ | d d d g ƒ | d d d d g ƒ | d d d d g ƒ d  S(	   Nc           s   ˆ j  t ˆ  |  ƒ | ƒ d  S(   N(   R9   R’   (   Rƒ   t   l(   t   domsR<   (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   eq_®  s    i    i   i   i   ic   i"   i*   (   R‹   RŒ   t
   dominatorsR   (   R<   R¬   R„   (    (   R«   R<   s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_dominators_loopless­  s    c      
   C  sÒ  |  j  ƒ  } | j ƒ  } |  j | i d g d 6d d g d 6d d d g d 6d d d d g d 6d d d d g d 6d d d d d g d 6d d d g d 6d d d g d 6ƒ |  j ƒ  } | j ƒ  } |  j | i d g d 6d d g d 6d d d g d 6d d d	 d g d	 6d d d
 d	 d g d
 6d d
 d d d d	 g d 6d d d
 d d d d	 g d 6d d
 d d d d d	 g d 6d d
 d d d d	 g d 6d d
 d d d d d	 g d 6d d d g d 6d d d d g d 6d d d d d g d 6d d d d d d g d 6d d d d d d d g d 6d d d d d d g d 6d d d d d d d g d 6ƒ |  j ƒ  } | j ƒ  } |  j | i d g d 6d d g d 6d d g d 6d d d	 g d	 6d d d d	 g d 6d d d	 d g d 6ƒ d  S(   Ni    i   i
   i   i   i   i$   i%   i   i   i    i,   i8   i9   i<   i=   iD   iG   iP   iW   iX   i   i   (   R   R­   R©   RŽ   R   (   R<   R„   R«   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_dominators_loops¿  sP    		 	c           s  ‡  ‡ f d †  } xu ˆ j  ƒ  ˆ j ƒ  g D][ } | j ƒ  ‰  | d d d g ƒ | d d d g ƒ | d d d g ƒ | d d g ƒ q+ Wˆ j ƒ  } | j ƒ  ‰  | d d g ƒ | d d g ƒ | d d g ƒ | d d d g ƒ | d d d g ƒ | d d d g ƒ d  S(	   Nc           s   ˆ j  t ˆ  |  ƒ | ƒ d  S(   N(   R9   R’   (   Rƒ   Rª   (   R«   R<   (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyR¬   í  s    i    i   i   i   i"   i*   ic   (   R‹   RŒ   t   post_dominatorsR   (   R<   R¬   R„   (    (   R«   R<   s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_post_dominators_looplessì  s    c         C  s  |  j  ƒ  } | j ƒ  } |  j | i d d g d 6d g d 6d g d 6d g d 6d g d 6d d g d 6d d g d 6d g d 6ƒ |  j ƒ  } | j ƒ  } |  j | i d d	 d
 d d g d 6d	 d
 d d g d 6d
 d d d d d d d	 d g	 d 6d
 d d d d d d	 d g d 6d d
 d d d d	 d g d 6d
 d d d d d d	 d g d 6d d
 d d d d d	 d g d 6d
 d d d d d d	 d g d 6d
 d d d d	 d g d 6d d	 d
 d d g d 6d	 d
 d g d	 6d
 d g d 6d
 g d
 6d g d 6d g d 6d d g d 6d g d 6ƒ d  S(   Ni    i   i
   i   i   i   i%   i$   i<   iD   i=   i   i   i8   i9   i    i,   iG   iP   iX   iW   (   R   R°   R©   RŽ   (   R<   R„   R«   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_post_dominators_loopsþ  s>    	



	"


c         C  s¾   |  j  ƒ  } | j ƒ  } |  j | i d g d 6d g d 6d d g d 6d g d 6d g d 6d g d 6ƒ |  j ƒ  } | j ƒ  } |  j | i d d g d 6d g d 6d g d 6d	 g d	 6ƒ d  S(
   Ni    i   i
   i   i   i   i   i	   i   (   R   R°   R©   R‘   (   R<   R„   R«   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt#   test_post_dominators_infinite_loops!  s     	


	

c           sµ  ‡  f d †  } | ˆ  j  ƒ  i d d d h d 6t ƒ  d 6t ƒ  d 6t ƒ  d 6ƒ | ˆ  j ƒ  i t ƒ  d 6t ƒ  d 6d d h d 6t ƒ  d 6t ƒ  d 6d d d h d 6ƒ | ˆ  j ƒ  i d d d h d 6t ƒ  d 6t ƒ  d 6t ƒ  d 6ƒ | ˆ  j ƒ  i d	 h d 6d
 d h d	 6d h d 6d h d 6d d h d 6d h d 6t ƒ  d 6d h d 6t ƒ  d 6d h d
 6d h d 6d d h d 6d d h d 6t ƒ  d 6t ƒ  d 6d h d 6t ƒ  d 6ƒ | ˆ  j ƒ  i d	 h d 6d
 d d h d	 6t ƒ  d 6d d h d
 6d h d 6t ƒ  d 6t ƒ  d 6t ƒ  d 6ƒ | ˆ  j ƒ  i d
 d h d 6t ƒ  d 6d h d
 6d d h d 6t ƒ  d 6t ƒ  d 6ƒ | ˆ  j ƒ  i d h d 6d  d! h d 6t ƒ  d! 6t ƒ  d  6ƒ d  S("   Nc           s    |  j  ƒ  } ˆ  j | | ƒ d  S(   N(   t   dominator_treeR9   (   t   graphR¥   t   domtree(   R<   (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   check8  s    i   i   i   i    i"   i*   ic   i   i
   i<   i=   iD   iG   iW   iX   iP   i   i   i8   i   i    i,   i9   i$   i%   i   i   i   i   i   i   i	   (   R‹   t   setR   RŒ   RŽ   R   R   R‘   (   R<   R·   (    (   R<   s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_dominator_tree7  s*    585;2."4,;c           sï  ‡  f d †  } | ˆ  j  ƒ  i d d 6d d 6d d 6d d 6ƒ | ˆ  j ƒ  i d d 6d d 6d d 6d d 6d d 6d d 6ƒ | ˆ  j ƒ  i d d 6d d 6d d 6d d 6ƒ | ˆ  j ƒ  i d d 6d d	 6d	 d
 6d
 d 6d d 6d d 6d d 6d d 6d d 6d d 6d	 d 6d d 6d d 6d d 6d d 6d d 6d d 6ƒ | ˆ  j ƒ  i d d 6d d	 6d	 d
 6d
 d 6d
 d 6d d 6d	 d 6d	 d 6ƒ | ˆ  j ƒ  i d d 6d d 6d d
 6d
 d 6d d 6d d 6ƒ | ˆ  j ƒ  i d d 6d d 6d d  6d d! 6ƒ d  S("   Nc           s    |  j  ƒ  } ˆ  j | | ƒ d  S(   N(   t   immediate_dominatorsR9   (   Rµ   R¥   t   idoms(   R<   (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyR·   R  s    i    i   i   i   ic   i*   i"   i   i
   i   i   i   i    i,   i8   i9   i<   i=   iD   iG   iP   iW   iX   i   i   i$   i%   i   i   i   i	   i   (   R‹   R   RŒ   RŽ   R   R   R‘   (   R<   R·   (    (   R<   s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_immediate_dominatorsQ  s"    #1#-*'?1c           s‹  ‡  f d †  } | ˆ  j  ƒ  i t ƒ  d 6d h d 6d h d 6t ƒ  d 6ƒ | ˆ  j ƒ  i d h d 6d h d 6t ƒ  d 6t ƒ  d 6t ƒ  d 6t ƒ  d 6ƒ | ˆ  j ƒ  i t ƒ  d 6d h d 6d h d 6t ƒ  d 6ƒ | ˆ  j ƒ  i t ƒ  d 6d	 h d	 6d	 h d
 6d	 h d 6d d	 h d 6d h d 6d h d 6d h d 6d	 h d 6d	 h d 6t ƒ  d 6t ƒ  d 6d h d 6d h d 6t ƒ  d 6t ƒ  d 6t ƒ  d 6ƒ | ˆ  j ƒ  i t ƒ  d 6d	 h d	 6d d	 h d
 6t ƒ  d 6d d	 h d 6d h d 6d h d 6t ƒ  d 6ƒ | ˆ  j ƒ  i t ƒ  d 6t ƒ  d 6t ƒ  d
 6d h d 6d h d 6d h d 6ƒ | ˆ  j ƒ  i t ƒ  d 6d h d 6d h d  6d h d! 6ƒ d  S("   Nc           s    |  j  ƒ  } ˆ  j | | ƒ d  S(   N(   t   dominance_frontierR9   (   Rµ   R¥   t   df(   R<   (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyR·   h  s    i    i   i   i   i*   i"   ic   i   i
   i   i   i   i    i,   i8   i9   i<   i=   iD   iG   iP   iW   iX   i%   i   i   i$   i   i   i   i	   i   (   R‹   R¸   R   RŒ   RŽ   R   R   R‘   (   R<   R·   (    (   R<   s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_dominance_frontierg  s$    /C/B<6./Cc         C  sw   xB |  j  ƒ  |  j ƒ  g D]( } |  j t | j ƒ  ƒ d d g ƒ q W|  j ƒ  } |  j t | j ƒ  ƒ d d g ƒ d  S(   Ni    i   ic   (   R‹   RŒ   R9   R’   t   backboneR   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_backbone_loopless~  s    &c         C  s”   |  j  ƒ  } |  j t | j ƒ  ƒ d d d d d g ƒ |  j ƒ  } |  j t | j ƒ  ƒ d g ƒ |  j ƒ  } |  j t | j ƒ  ƒ d d g ƒ d  S(   Ni    i   i<   i=   iD   i   (   RŽ   R9   R’   RÀ   R   R‘   (   R<   R„   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_backbone_loops„  s    +c         C  s   xE |  j  ƒ  |  j ƒ  |  j ƒ  g D]" } |  j t | j ƒ  ƒ d ƒ q" W|  j ƒ  } |  j t | j ƒ  ƒ d d d g ƒ | j ƒ  d } | j ƒ  d } | j ƒ  d } |  j | j d ƒ |  j t | j	 ƒ d g ƒ |  j t | j
 ƒ d g ƒ |  j t | j ƒ d d d d d d	 d
 d d g	 ƒ |  j | j d ƒ |  j t | j	 ƒ d g ƒ |  j t | j
 ƒ d g ƒ |  j t | j ƒ d d d	 d
 g ƒ |  j | j d ƒ |  j t | j	 ƒ d g ƒ |  j t | j
 ƒ d d g ƒ |  j t | j ƒ d d g ƒ x9 d d d d d d g D] } |  j | j | ƒ g  ƒ qWx9 d d d d d g D]" } |  j | j | ƒ | g ƒ qWWx9 d d d	 d
 g D]% } |  j | j | ƒ | | g ƒ qWx0 d d g D]" } |  j | j | ƒ | g ƒ qÆW|  j ƒ  } |  j t | j ƒ  ƒ d g ƒ | j ƒ  d } |  j | j d ƒ |  j t | j	 ƒ d g ƒ |  j t | j
 ƒ g  ƒ |  j t | j ƒ d d d g ƒ x0 d d d g D] } |  j | j | ƒ g  ƒ q¡Wx3 d d d g D]" } |  j | j | ƒ | g ƒ qÔW|  j ƒ  } |  j t | j ƒ  ƒ d g ƒ | j ƒ  d } |  j | j d ƒ |  j t | j	 ƒ d g ƒ |  j t | j
 ƒ g  ƒ |  j t | j ƒ d d d g ƒ x* d g D] } |  j | j | ƒ g  ƒ q©Wx3 d d d g D]" } |  j | j | ƒ | g ƒ qÜW|  j ƒ  } |  j t | j ƒ  ƒ d g ƒ | j ƒ  d } |  j | j d ƒ |  j t | j	 ƒ d g ƒ |  j t | j
 ƒ d d d g ƒ |  j t | j ƒ d d d g ƒ x3 d d d d g D] } |  j | j | ƒ g  ƒ qÃWx3 d d d g D]" } |  j | j | ƒ | g ƒ qöWd  S(   Ni    i   i   iD   i<   i
   i   i   i    i,   i8   i9   i=   iP   iW   iG   iX   i   i   i   i   i	   i   i   i$   (   R‹   RŒ   R   R9   R˜   t   loopsRŽ   R’   t   headert   entriest   exitst   bodyt   in_loopsR   R‘   R   (   R<   R„   t   outer1t   inner1t   outer2R…   t   loop(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt
   test_loopsŒ  s|     %"% # " " ""(   R}   R~   t   __doc__Rˆ   R‹   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<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyR   ™  s6   				%												-		#						t   TestRealCodeDomFrontc           B  sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s)  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         C  s   t  | ƒ } | j ƒ  | S(   N(   R   t   run(   R<   t   bct   cfa(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyRÒ   á  s    
c         C  sI   t  j | ƒ } t d | ƒ } |  j | ƒ } |  j | | ƒ } | | f S(   Nt   func_id(   R   t   from_functionR   RÒ   t   _scan_namedblocks(   R<   t   fnt   fidRÑ   RÒ   t   namedblocks(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   get_cfa_and_namedblocksæ  s
    c         C  sÿ   i  } t  g  | j ƒ  D] } | j ^ q ƒ } d } xÄ | D]¼ } | j d k r; | j | j } | j | ƒ r÷ | t | ƒ }	 x_ t | | d | d d g ƒ D]/ \ }
 } |
 | j k oÈ | k  n r¢ Pq¢ q¢ Wt	 d ƒ ‚ |
 } | | |	 <q÷ q; q; W| S(   sÉ   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.
        t
   SET_BLOCK_t   LOAD_GLOBALi   iÿÿÿÿs   unreachable loop(
   R’   t
   iterblockst   offsett   opnamet   co_namest   argt
   startswithR˜   t   zipt   AssertionError(   R<   RÑ   RÒ   RØ   R   t   blockst   prefixt   instt   gvt   namet   sRE   t   blkno(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyRÕ   ù  s    (/c         C  s¥   d „  } |  j  | ƒ \ } } | j j ƒ  } |  j | d | | d ƒ | j j ƒ  } |  j | | d ƒ |  j | | d ƒ |  j | d h | | d ƒ d  S(   Nc         S  s=   d } t  d } x" t r4 t | d 7} | d 7} q Wt | S(   Ni    i   (   t   SET_BLOCK_At   SET_BLOCK_B0t   SET_BLOCK_B1t   SET_BLOCK_C(   t   nt   cR   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   foo  s    	
t   B0t   B1t   At   C(   RÙ   Rµ   Rº   R9   R½   t   assertFalse(   R<   Rñ   RÒ   t   blkptsR»   t   domfront(    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt	   test_loop  s    	c         C  s~  d „  } |  j  | ƒ \ } } | j j ƒ  } |  j | d | d ƒ |  j | d | | d ƒ | j j ƒ  } |  j | | d ƒ |  j | | d ƒ |  j | d h | | d ƒ |  j | d | d	 h | | d ƒ |  j | d	 h | | d
 ƒ |  j | d h | | d ƒ |  j | d h | | d ƒ |  j | d h | | d	 ƒ |  j | d h | | d ƒ d  S(   Nc         S  sQ   t  xB t rH t x- t r@ t t r, t Pn |  r9 t n  t q Wt	 q Wt
 d  S(   N(   Rë   Rì   Rí   t   SET_BLOCK_C0t   SET_BLOCK_C1t   SET_BLOCK_D0t   SET_BLOCK_D1t   SET_BLOCK_D2t   SET_BLOCK_Et   SET_BLOCK_Ft   SET_BLOCK_G(   Rï   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyRñ   )  s    		t   D0t   C1t   C0Rô   t   GRò   Ró   t   Ft   D1t   Et   D2(   RÙ   Rµ   Rº   R9   R½   Rö   (   R<   Rñ   RÒ   R÷   R»   Rø   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_loop_nested_and_break(  s    	&c         C  sÞ  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 ƒ d  S(
   Nc         S  sm   d } t  |  | k  r# t d } n t r6 t d } n
 t d } t |  | d k re t | d 7} n  t | S(   Ni    i   i   i   (   Rë   t   SET_BLOCK_BRú   Rû   t   SET_BLOCK_DRÿ   R   R  (   t   at   bRð   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyRñ   K  s     		Rô   t   BR  R  t   DR  R  R  (   RÙ   Rµ   Rº   R9   R½   Rö   (   R<   Rñ   RÒ   R÷   R»   Rø   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_if_elseJ  s&    	c         C  sŽ  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 ƒ d  S(
   Nc          S  sM   t  rE t t r t d }  n! t r0 t d }  n
 t d }  t t n  t	 |  S(   Ni    i   i   (
   t   SET_BLOCK_A0t   SET_BLOCK_A1Rì   Rí   Rú   Rû   t   SET_BLOCK_C2R  Rÿ   R   (   R  (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyRñ   u  s    		t   A0t   A1Ró   R  R  R  R  R  (   RÙ   Rµ   Rº   R9   R½   Rö   (   R<   Rñ   RÒ   R÷   R»   Rø   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_if_else_nestedt  s     	c         C  s/  d „  } t  t ƒ } |  j | ƒ \ } } | j j ƒ  } | rV |  j | d | ƒ n  |  j | d | | d ƒ |  j | d | | d ƒ | j j ƒ  } | rº |  j | d | ƒ n  |  j | | d ƒ |  j | | d ƒ | r+|  j | d h | | d ƒ |  j | d h | | d ƒ n  d  S(   Nc           S  s+   t  x t r" t r t d  St q Wt d  S(   N(   Rë   R%   R  Rî   R  Rÿ   (    (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyRñ   š  s    	R  R  Rõ   R  Rô   (	   t   boolR	   RÙ   Rµ   Rº   t   assertNotInR9   R½   Rö   (   R<   Rñ   t   infinite_loop_opt_outRÒ   R÷   R»   Rø   (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   test_infinite_loop™  s     	
(   R}   R~   RÎ   RÒ   RÙ   RÕ   Rù   R
  R  R  R  (    (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyRÏ   Õ  s   					"	*	%t   __main__(6   t
   __future__R    R6   t   numba.unittest_supportt   unittest_supportt   unittestt   numba.controlflowR   R   t   numba.compilerR   R   t   numbaR   R   t   numba.bytecodeR   R   t   numba.utilsR	   t   supportR
   R   Rt   R¸   t   forceobj_flagsRJ   R   R   R   R   R   R   R   R   R    R!   R"   R#   R$   R&   R'   R(   R)   R*   R+   R-   R/   R1   R2   R   RÏ   R}   t   main(    (    (    s<   lib/python2.7/site-packages/numba/tests/test_flow_control.pyt   <module>   sV   												
			
							
	
							¹ÿ ÿ >ã