ó
\K]c           @@ sV  d  d l  m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z	 d d l
 m Z m Z m Z m Z m Z d  d l m Z d  d l m Z m Z m Z d  d l m Z m Z d  d l m Z d  d	 l m Z d  d
 l m Z m Z d d l m  Z  d d l! m" Z" d „  Z# d „  Z$ d e% f d „  ƒ  YZ& d e j' f g Z( d „  Z) d „  Z* d „  Z+ e ƒ  Z, e, j- d e e. ƒ ƒ e, j- d ƒ d e f d „  ƒ  YZ/ d e/ f d „  ƒ  YZ0 d e0 f d „  ƒ  YZ1 d e/ f d „  ƒ  YZ2 d e/ f d  „  ƒ  YZ3 d! e0 f d" „  ƒ  YZ4 d# e f d$ „  ƒ  YZ5 e6 d% k rRe j7 ƒ  n  d S(&   i    (   t   print_functiont   absolute_importNi   (   t   TestCaset   override_configt   override_env_configt   captured_stdoutt   forbid_codegen(   t   unittest_support(   t   jitt   jitclasst   types(   t   compile_isolatedt   Flags(   t   ParallelOptions(   t   NumbaPerformanceWarning(   t   compilert   prange(   t   skip_unsupported(   t
   needs_blasc         C@ s   |  d } | S(   Ni   (    (   t   someargt   retval(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   simple_nopython   s    
c         c@ s   |  V| Vd  S(   N(    (   t   xt   y(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt
   simple_gen   s    t   SimpleClassc           B@ s   e  Z d  „  Z RS(   c         C@ s   d |  _  d  S(   Ni   (   t   h(   t   self(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   __init__    s    (   t   __name__t
   __module__R   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyR      s   R   c         C@ s   |  j  S(   N(   R   (   t   obj(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   simple_class_user%   s    c         C@ s   t  j |  | ƒ S(   N(   t   npt   dot(   t   at   b(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   unsupported_parfor(   s    c         C@ sE   t  j |  ƒ } x/ t |  ƒ D]! } | | t  j | ƒ | | <q W| S(   N(   R!   t   onesR   t   sin(   t   nR#   t   i(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   supported_parfor+   s    t   auto_parallelt   nrtt   DebugTestBasec        	   B@ s†   e  Z e d  d d d d d d d g ƒ Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z RS(   t   bytecodet   cfgt   irt	   typeinfert   llvmt   func_opt_llvmt   optimized_llvmt   assemblyc         O@ s   |  j  t | | Ž d  S(   N(   t   assertRaisest   AssertionError(   R   t   argst   kwargs(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   assert_fails:   s    c         C@ sŸ   t  j |  j t ƒ } x* | D]" } | | k s4 t ‚ t | | <q WxV t | j ƒ  ƒ D]B \ } } t |  d | ƒ } | r‡ | | ƒ qU |  j	 | | ƒ qU Wd  S(   Ns   _check_dump_%s(
   t   dictt   fromkeyst	   all_dumpst   FalseR7   t   Truet   sortedt   itemst   getattrR:   (   R   t   outt
   dump_namest   enabled_dumpst   namet   enabledt
   check_meth(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   check_debug_output=   s    c         C@ s   |  j  d | ƒ d  S(   Nt
   BINARY_ADD(   t   assertIn(   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_bytecodeI   s    c         C@ s   |  j  d | ƒ d  S(   Ns   CFG dominators(   RK   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_cfgL   s    c         C@ s   |  j  d |  j | ƒ d  S(   Ns   --IR DUMP: %s--(   RK   t	   func_name(   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_irO   s    c         C@ s   |  j  d | ƒ d  S(   Ns   --propagate--(   RK   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_typeinferR   s    c         C@ s@   |  j  d | ƒ t j j d j t k r< |  j  d | ƒ n  d  S(   Ns   --LLVM DUMPR+   s   %"retval" = alloca(   RK   R   R   t   OPTIONSRG   R>   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_llvmU   s    c         C@ s+   |  j  d |  j | ƒ |  j  d | ƒ d  S(   Ns   --FUNCTION OPTIMIZED DUMP %ss   add nsw i64 %arg.somearg, 1(   RK   RN   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_func_opt_llvmZ   s    c         C@ s+   |  j  d |  j | ƒ |  j  d | ƒ d  S(   Ns   --OPTIMIZED DUMP %ss   add nsw i64 %arg.somearg, 1(   RK   RN   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_optimized_llvm_   s    c         C@ s@   |  j  d |  j | ƒ t j ƒ  d k r< |  j  d | ƒ n  d  S(   Ns   --ASSEMBLY %st   x86_64t   AMD64t   i386t   i686t   xorl(   RU   RV   RW   RX   (   RK   RN   t   platformt   machine(   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   _check_dump_assemblyc   s    (   R   R   t   setR=   R:   RI   RL   RM   RO   RP   RR   RS   RT   R\   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyR-   5   s   									t   FunctionDebugTestBasec           B@ s   e  Z d  Z d „  Z RS(   R   c         C@ sJ   t  ƒ  5 } t t t j f ƒ } |  j | j d ƒ d ƒ Wd  QX| j ƒ  S(   Ni   i   (   R   R   R   R
   t   int64t   assertPreciseEqualt   entry_pointt   getvalue(   R   RC   t   cres(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   compile_simple_nopythonm   s    (   R   R   RN   Rd   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyR^   i   s   t   TestFunctionDebugOutputc           B@ sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C@ s9   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ d  S(   Nt   DUMP_BYTECODER.   (   R   R?   Rd   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_bytecodew   s    c         C@ s9   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ d  S(   Nt   DUMP_IRR0   (   R   R?   Rd   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_ir|   s    c         C@ s9   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ d  S(   Nt   DUMP_CFGR/   (   R   R?   Rd   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_cfg   s    c         C@ s9   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ d  S(   Nt	   DUMP_LLVMR2   (   R   R?   Rd   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_llvm†   s    c         C@ s9   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ d  S(   Nt   DUMP_FUNC_OPTR3   (   R   R?   Rd   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_func_opt_llvm‹   s    c         C@ s9   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ d  S(   Nt   DUMP_OPTIMIZEDR4   (   R   R?   Rd   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_optimized_llvm   s    c         C@ s9   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ d  S(   Nt   DUMP_ASSEMBLYR5   (   R   R?   Rd   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_assembly•   s    (	   R   R   Rg   Ri   Rk   Rm   Ro   Rq   Rs   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyRe   u   s   						t   TestGeneratorDebugOutputc           B@ s    e  Z d  Z d „  Z d „  Z RS(   R   c      	   C@ s_   t  ƒ  J } t t t j t j f ƒ } |  j t | j d d ƒ ƒ d d g ƒ Wd  QX| j ƒ  S(   Ni   i   (	   R   R   R   R
   R_   R`   t   listRa   Rb   (   R   RC   Rc   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   compile_simple_genŸ   s    .c         C@ so   t  d t ƒ  |  j ƒ  } Wd  QX|  j | d g ƒ |  j d |  j | ƒ t j d ƒ } |  j | | ƒ d  S(   NRh   R0   s   --GENERATOR INFO: %ssÜ   
            generator state variables: ['x', 'y']
            yield point #1: live variables = ['y'], weak live variables = ['x']
            yield point #2: live variables = [], weak live variables = ['y']
            (   R   R?   Rv   RI   RK   RN   t   textwrapt   dedent(   R   RC   t   expected_gen_info(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_dump_ir_generator¦   s    	(   R   R   RN   Rv   Rz   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyRt   ›   s   	t   TestDisableJITc           B@ s    e  Z d  Z d „  Z d „  Z RS(   s:   
    Test the NUMBA_DISABLE_JIT environment variable.
    c         C@ sU   t  d t ƒ @ t ƒ  0 t d t ƒ t ƒ } |  j | d ƒ d ƒ Wd  QXWd  QXd  S(   Nt   DISABLE_JITt   nopythoni   i   (   R   R?   R   R   R   R`   (   R   t   cfunc(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_jit¸   s    
c         C@ sƒ   t  d t ƒ n t ƒ  ^ t t ƒ t ƒ } | ƒ  } |  j | j d ƒ t d t ƒ t	 ƒ } |  j | | ƒ d ƒ Wd  QXWd  QXd  S(   NR|   i   R}   (
   R   R?   R   R	   t   simple_class_specR   R`   R   R   R    (   R   t   SimpleJITClassR   R~   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_jitclass¾   s    
	(   R   R   t   __doc__R   R‚   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyR{   ³   s   	t   TestEnvironmentOverridec           B@ s   e  Z d  Z e Z d „  Z RS(   sN   
    Test that environment variables are reloaded by Numba when modified.
    c         C@ sz   |  j  ƒ  } |  j | ƒ t d d ƒ 3 |  j  ƒ  } |  j | d d d d d d g ƒ Wd  QX|  j  ƒ  } |  j | ƒ d  S(	   Nt   NUMBA_DEBUGt   1R0   R1   R2   R3   R4   R5   (   Rd   t   assertFalseR   RI   (   R   RC   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt
   test_debugÒ   s    (   R   R   Rƒ   R>   t   _numba_parallel_test_Rˆ   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyR„   Ê   s   t   TestParforsDebugc           B@ sA   e  Z d  Z e Z d „  Z e e d „  ƒ ƒ Z e d „  ƒ Z	 RS(   s5   
    Tests debug options associated with parfors
    c         C@ sP   d } t  } x- | D]% } | t | j ƒ k r t } Pq q W|  j | d ƒ d  S(   NsX   'parallel=True' was specified but no transformation for parallel execution was possible.s    Warning message should be found.(   R>   t   strt   messageR?   t
   assertTrue(   R   t	   warn_listt   msgt   warning_foundt   w(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   check_parfors_warningç   s    c      	   C@ so   t  j t  j d d ƒ } t j d t ƒ 2 } t j d t ƒ t t	 | | f d t
 ƒ} Wd QX|  j | ƒ d S(   sr   
        Test that using parallel=True on a function that does not have parallel
        semantics warns.
        i   t   Ct   recordt   alwayst   flagsN(   R
   t   Arrayt   float64t   warningst   catch_warningsR?   t   simplefilterR   R   R%   t   force_parallel_flagsR’   (   R   t   arr_tyR‘   Rc   (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt
   test_warnsñ   s    c         C@ s  t  t t j f d t ƒ} t d d ƒ ït ƒ  " } t  t t j f d t ƒ} Wd QX| j ƒ  j d ƒ } g  | D] } d | k rt | ^ qt } g  | D] } d | k r™ | ^ q™ } g  | D] } d | k r¾ | ^ q¾ } t	 t
 j d	 ƒ j | d
 ƒ j d ƒ ƒ } t | | t | ƒ ƒ }	 d d f }
 d } xE t |	 | |
 ƒ D]1 \ } } } | j | | ƒ } |  j | | ƒ qEW| d | d
 f }
 d } x- | D]% } | j |
 Œ  } |  j | | ƒ q›Wt j d t | g ƒ f }
 d } x- | D]% } | j |
 Œ  } |  j | | ƒ qìWWd QXd S(   sM   
        Test that NUMBA_DEBUG_ARRAY_OPT_STATS produces valid output
        R–   t   NUMBA_DEBUG_ARRAY_OPT_STATSR†   Ns   
s   is produced from patterns   is fused intos   After fusion, functions	   #([0-9]+)i    i   s"   ('ones function', 'NumPy mapping')R   t   usert    s6   Parallel for-loop #{} is produced from pattern '{}' ats1   Parallel for-loop #{} is fused into for-loop #{}.s:   After fusion, function {} has {} parallel for-loop(s) #{}.(   R   R    R¡   (   R   R*   R
   R_   Rœ   R   R   Rb   t   splitt   intt   ret   compilet   searcht   groupt   ranget   lent   zipt   formatRK   R   R]   (   R   Rc   RC   t   outputR   t   parallel_loop_outputt   fuse_outputt   after_fusion_outputt   parfor_statet   boundst   patternt   fmtR)   t   trialst   lpatternt   to_match(    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   test_array_debug_opt_statsÿ   s>    		%%%	(
   R   R   Rƒ   R>   R‰   R’   R   R   Rž   R·   (    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyRŠ   ß   s   	
t   __main__(8   t
   __future__R    R   t   osRZ   R¤   Rw   R™   t   numpyR!   t   supportR   R   R   R   R   t   numbaR   t   unittestR   R	   R
   t   numba.compilerR   R   t   numba.targets.cpuR   t   numba.errorsR   R   R   t   test_parforsR   t   matmul_usecaseR   R   R   t   objectR   t   int32R€   R    R%   R*   Rœ   R]   R?   R-   R^   Re   Rt   R{   R„   RŠ   R   t   main(    (    (    s5   lib/python2.7/site-packages/numba/tests/test_debug.pyt   <module>   sD   (						4&Z