ó
\K]c           @   s	  d  d l  Z  d d l m Z m Z d  d l  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 d  d l  m Z m Z m Z d	 Z e d
 e  j j e  j ƒ f g ƒ d e f d „  ƒ  Yƒ Z d e f d „  ƒ  YZ e d k re j ƒ  n  d S(   iÿÿÿÿNi   (   t   TestCaset   unittest(   t   compilert   jitclasst   ir(   t
   cpu_target(   t   Pipelinet   Flagst   _PipelineManager(   t   registry(   t   typest   ir_utilst   bytecodei   t   valt   Dummyc           B   s   e  Z d  „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   t   selfR   (    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   __init__   s    (   t   __name__t
   __module__R   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyR      s   t   TestIrUtilsc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sA   
    Tests ir handling utility functions like find_callname.
    c         C   s¤   d „  } t  j | ƒ } t j } t  j | | d d ƒ \ } } } t j | | j d j	 d j
 | ƒ } |  j t | t ƒ oœ t | ƒ d k oœ | d d k ƒ d S(   sG   Test matching of an object method (other than Array see #3449)
        c          S   s#   t  d g ƒ }  |  j j d ƒ d  S(   Ni   i   (   R   R   t   append(   t   d(    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt	   test_func   s    i    i   i   R   N(    (   R   t   run_frontendR   t   typing_contextt   type_inference_staget   NoneR   t   find_callnamet   blockst   bodyt   valuet
   assertTruet
   isinstancet   tuplet   len(   R   R   t   test_irt	   typingctxt   typemapt   _t   matched_call(    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   test_obj_func_match   s    		 c   	         sß   d t  f d „  ƒ  Y} ‡  f d †  } ‡  f d †  } d „  } | j t j f ƒ } | j | ƒ } | | ƒ } | j t j f ƒ } | j | d t ƒ} | | ƒ ˆ  j t | j d j	 ƒ t | ƒ t | j d j	 ƒ ƒ d  S(   Nt   Testerc           B   s>   e  Z e d d i  d d d d  „ ƒ Z d „  Z e d „ Z RS(   c         S   sm   | s t  ƒ  } n  t | _ | d  k r6 t j j } n  | d  k rQ t j j } n  |  | | | | | | | ƒ S(   N(   R   t   Truet   nrtR   R	   R   R   t   target_context(   t   clst   argst   return_typet   flagst   localst   libraryR   R,   (    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   mk_pipeline/   s    	c         S   s   t  j |  j d |  j ƒd  S(   NR%   (   R   t   dead_code_eliminationt   func_irR%   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   rm_dead_stage=   s    c         S   s³   t  j j | ƒ |  _ |  j |  j ƒ |  _ g  |  _ t ƒ  } | j d ƒ |  j	 | ƒ |  j
 | ƒ |  j | ƒ | t k r’ | j |  j d ƒ n  | j ƒ  | j |  j ƒ |  j S(   s7   
                Compile and return IR
                t   pipelines   DCE after typing(   R   t   FunctionIdentityt   from_functiont   func_idt   extract_bytecodet   bct   liftedR   t   create_pipelinet   add_preprocessing_staget   add_pre_typing_staget   add_typing_stageR*   t	   add_stageR6   t   finalizet   runt   statusR5   (   R   t   funct   DCEt   pm(    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   compile_to_irA   s    		
N(   R   R   t   classmethodR   R3   R6   t   FalseRI   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyR)   -   s   		c   	         sÝ  ˆ  j  t |  j ƒ d ƒ |  j d } g  } g  | j t j ƒ D] } | ^ q? } xf | j t j ƒ D]R } t t | d d  ƒ t j
 ƒ rd d t | j d d ƒ k r¶ | j | ƒ q¶ qd qd Wg  } ˆ  j  t | ƒ d ƒ | j | ƒ g  | D] } | j ^ qê } xÁ | D]¹ } |  j | j ƒ } ˆ  j t d | j j d	 ƒ | j ƒ | j | ƒ ˆ  j | j j | ƒ ˆ  j | j j | ƒ x? | D]7 } | j | j j | j j f k r„| j | ƒ q„q„WqWˆ  j  t | ƒ d
 ƒ | S(   Ni   i    t   targett   deadt   namet    i   s   0x%si   i   (   t   assertEqualR"   R   t
   find_instsR   t   Delt   AssignR    t   getattrR   t   VarRL   R   t   extendR   t   get_definitionR   t   intRN   t   assertIn(	   t   the_irt   blockt   deadst   xt   delst   expect_removedt	   del_namesR   t	   const_val(   R   (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   check_initial_irT   s0    
%
!c            sa  ˆ  j  t |  j ƒ d ƒ |  j d } g  } g  } g  | j t j ƒ D] } | ^ qE } x” | j t j ƒ D]€ } t t | d d  ƒ t j
 ƒ r¼ d t | j d d ƒ k r¼ | j | ƒ q¼ n  t t | d d  ƒ t j ƒ rj | j | ƒ qj qj Wˆ  j  t | ƒ d ƒ ˆ  j t g  | D] } d | j k ^ qƒ ƒ x' | D] } ˆ  j | j j d
 k ƒ q:Wd  S(   Ni   i    RL   RM   RN   RO   R   i­Þ  I­Þ­Þ    (   i­Þ  I­Þ­Þ    (   RP   R"   R   RQ   R   RR   RS   R    RT   R   RU   RL   R   t   ConstR   t   allR   (   RZ   R[   R\   t   constsR]   R^   (   R   (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   check_dce_ir~   s    %/c         S   s.   |  d } d } | d } d } | | } | S(   Ni   i­Þ  i   I­Þ­Þ    (    (   R]   t   yRM   t   zt   deaddeadt   ret(    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   foo“   s    


RG   i    (
   R   R3   R
   t   intpRI   R*   RP   R"   R   R   (	   R   R)   Rb   Rf   Rk   t   test_pipelinet   no_dcet   removedt   w_dce(    (   R   s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   test_dead_code_elimination+   s    '*	
#c            sù   d ‰  ‡  f d †  } t  j | ƒ } | j d } d } d } x• | j D]Š } t | t j ƒ r | j j	 d k r t
 j t
 j | | j ƒ } n  t | t j ƒ rG | j j	 d k rG t
 j t
 j | | j ƒ } qG qG W|  j | t ƒ |  j | ˆ  ƒ d S(   s–   
        Test find_const() for values in globals (ir.Global) and freevars
        (ir.FreeVar) that are considered constants for compilation.
        i   c            s   t  } ˆ  } |  | | S(   N(   t   GLOBAL_B(   t   at   bt   c(   t	   FREEVAR_C(    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyRk   ®   s    i    Rt   Ru   N(   R   R   R   R   R   R    R   RS   RL   RN   R   t   guardt
   find_constRP   Rr   (   R   Rk   t   f_irR[   t   const_bt   const_ct   inst(    (   Rv   s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   test_find_const_global§   s    $$(   R   R   t   __doc__R(   Rq   R}   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyR      s   		|t   __main__(   t   numbat   supportR    R   R   R   R   t   numba.targets.registryR   t   numba.compilerR   R   R   t   numba.targetsR	   R
   R   R   Rr   t   ListRl   t   objectR   R   R   t   main(    (    (    s8   lib/python2.7/site-packages/numba/tests/test_ir_utils.pyt   <module>   s   $°