
\K]c           @` s  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l m Z m Z d  d l	 Z	 d  d l
 m Z d  d l m Z m Z m Z d d l m Z m Z m Z m Z m Z m Z m Z m Z m Z d d l m Z m Z m Z m Z d d	 l m  Z  d d
 l m! Z! d d l m" Z" d e j# f d     YZ# e   Z$ d   Z% e d d d f  Z& d e' f d     YZ( i  Z) d e( f d     YZ* d   Z+ d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t
   namedtuplet   deque(   t   partial(   t   Constantt   Typet   Builderi   (	   t   _dynfunct   cgutilst   configt   funcdesct
   generatorst   irt   typest   typingt   utils(   t   LoweringErrort   new_error_contextt   TypingErrort   LiteralTypingError(   t   removerefctpass(   t   default_mangler(   t	   debuginfot   Environmentc           B` sA   e  Z d  Z d Z e j   Z e d    Z d   Z	 d   Z
 RS(   s~   Stores globals and constant pyobjects for runtime.

    It is often needed to convert b/w nopython objects and pyobjects.
    t   env_namet   __weakref__c         C` sY   y |  j  | j SWn@ t k
 rT |  | j    } | j | _ | |  j  | j <| SXd  S(   N(   t   _memoR   t   KeyErrort   lookup_globals(   t   clst   fndesct   inst(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   from_fndesc   s    c         C` s    t  |  j d |  j |  j f f S(   Nt   __name__(   t   _rebuild_envt   globalst   constsR   (   t   self(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt
   __reduce__)   s    
c         C` s   t  d  k s t  j r d  St d  k r) d  St j t j   |  f  t t  d k r t j   } x/ t r | t d d d k r t j   qc Wn  d  S(   Ni
   i    i   (   R   t   Nonet   IS_PY3t
   _keepalivet   appendt   timet   lent   popleft(   R'   t   cur(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   __del__0   s    !(   R   R   (   R#   t
   __module__t   __doc__t	   __slots__t   weakreft   WeakValueDictionaryR   t   classmethodR"   R(   R1   (    (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR      s   	c         C` sV   | t  j k r t  j | Sd d l m } | j |   } t  | j  } | | j (| S(   Ni   (   t	   serialize(   R   R   t    R8   t   _rebuild_modulet   __dict__R&   (   t   modnameR&   R   R8   t   modt   env(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR$   ?   s    
t   _VarArgItemt   varargt   indext	   BaseLowerc           B` s   e  Z d  Z d d  Z d   Z d   Z d   Z d   Z d   Z	 d d d  Z
 d   Z d	   Z d
   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z RS(   s   
    Lower IR to LLVM
    c         C` s.  | |  _  | |  _ t j t j | j   |  _ | |  _ | j |  _ | j |  _ | |  _	 |  j  j
 |  j j  |  _ t j |  j  |  _ i  |  _ i  |  _ t |  j j    |  _ d |  _ | j d |  j d |  j  |  _ |  j j r |  j j n t j } | d |  j d | j j  |  _ |  j   d  S(   Nit   environmentR    t   modulet   filepath(   t   libraryR    R   t	   SortedMapt	   iteritemst   blockst   func_irt	   call_convt   generator_infot   metadatat   create_ir_modulet   unique_nameRD   R   R"   R>   t   blkmapt   varmapt   mint   keyst   firstblkt   loct	   subtargett   contextt   enable_debuginfot	   DIBuilderR   t   DummyDIBuildert   filenamet   init(   R'   RW   RF   R    RJ   RM   t   dibuildercls(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   __init__Q   s(    								c         C` s   d  S(   N(    (   R'   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR\   x   s    c         C` se   |  j  d k	 r d S|  j j |  j  |  _  |  j j |  j  |  _ |  j j |  _ |  j j |  _	 d S(   se   
        Init the Python API and Environment Manager for the function being
        lowered.
        N(
   t   pyapiR)   RW   t   get_python_apit   buildert   get_env_managert   env_managert   env_bodyt   env_ptrt   envarg(   R'   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt
   init_pyapi{   s    c         C` s>   d |  _ |  j j d |  j j d |  j j d |  j j	  d S(   s4   
        Called before lowering all blocks.
        t   functiont   nameRU   N(
   R)   R_   R   t   mark_subprogramRa   Rh   R    t   qualnameRJ   RU   (   R'   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt	   pre_lower   s    	c         C` s   |  j  j   d S(   s5   
        Called after all blocks are lowered
        N(   R   t   finalize(   R'   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt
   post_lower   s    c         C` s   d S(   s1   
        Called before lowering a block.
        N(    (   R'   t   block(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt	   pre_block   R9   c         C` s2   |  j  j |  j | | d | d |  j j j d  S(   NRU   t	   func_name(   RK   t   return_user_excRa   RJ   t   func_idRq   (   R'   t	   exc_classt   exc_argsRU   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   return_exception   s    c         C` s/   |  j  j |  j  } |  j  j |  j |  d S(   s7   Emit a pointer to hold the Environment object.
        N(   RW   t   get_env_nameR    t   declare_env_globalRD   (   R'   t   envname(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   emit_environment_object   s    c         C` sI  |  j    |  j d  k r5 d  |  _ |  j |  j  n` |  j |   |  _ |  j j |  _ |  j j |   |  j j	 |   |  j j
 r |  j j |   n  t j r t d |  j j d d   t |  j  t d d  n  |  j j r|  j d  k rt j |  j d |  j d |  j n  |  j j |  j |  j  |  j j |  j  d  S(   Ns   LLVM DUMP %siP   t   -t   =RW   R    (   Rz   RL   R)   t   genlowert   lower_normal_functionR    t   GeneratorLowert   gentypet   lower_init_funct   lower_next_funct   has_finalizert   lower_finalize_funcR   t	   DUMP_LLVMt   printt   centerRD   RW   t
   enable_nrtR   t   remove_unnecessary_nrt_usageRh   t   post_loweringRF   t   add_ir_module(   R'   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   lower   s(    
			c         C` s.   |  j  j |  j |  j j |  j  |  _ |  j S(   N(   RK   t   decode_argumentsRa   R    t   argtypesRh   t   fnargs(   R'   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   extract_function_arguments   s    	c         C` sQ   |  j  |  |  j   |  j   } |  j j |  |  j j |  j |  j  d S(   s/   
        Lower non-generator *fndesc*.
        N(   t   setup_functionR   t   lower_function_bodyRa   t   position_at_endt   branchRP   RT   (   R'   R    t   entry_block_tail(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR~      s
    
c         C` s   x4 |  j  D]) } d | } |  j j |  |  j | <q
 W|  j   |  j j } |  j d j |  j	 j
   xM t |  j  j    D]6 \ } } |  j | } |  j j |  |  j |  q W|  j   | S(   sP   
        Lower the current function's body, and return the entry block.
        s   B%ss   # function begin: {0}(   RI   Rh   t   append_basic_blockRP   Rl   Ra   t   basic_blockt   debug_printt   formatR    RO   t   sortedt   itemsR   t   lower_blockRn   (   R'   t   offsett   bnameR   Ro   t   bb(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR      s    

"
c      	   C` s{   |  j  |  xg | j D]\ } | j |  _ t t d |  j } t d d | d |  j d |  |  j |  Wd QXq Wd S(   s(   
        Lower the given block.
        RU   s   lowering "{inst}" at {loc}R!   t   errcls_N(   Rp   t   bodyRU   R   R   R   t
   lower_inst(   R'   Ro   R!   t   defaulterrcls(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR      s    c         C` si   |  j  r: |  j j |  j |  j  j |  j |  j d | n  |  j j |  j |  j |  j |  j d | d S(   sP   
        Create CPython wrapper(s) around this function (or generator).
        t   release_gilN(   R}   RW   t   create_cpython_wrapperRF   t   gendescR>   t   call_helperR    (   R'   R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR     s    		
c         C` s^   |  j  j |  j |  |  _ |  j j d  |  _ t |  j  |  _ |  j j	 |  j  |  _
 d  S(   Nt   entry(   RW   t   declare_functionRD   Rh   R   t   entry_blockR   Ra   RK   t   init_call_helperR   (   R'   R    (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR     s    c         C` s   |  j  j | S(   N(   R    t   typemap(   R'   t   varname(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   typeof  s    c         C` s/   t  j r+ |  j j |  j d j |   n  d  S(   Ns   DEBUGJIT: {0}(   R   t	   DEBUG_JITRW   R   Ra   R   (   R'   t   msg(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR     s    	N(   R#   R2   R3   R)   R^   R\   Rg   Rl   Rn   Rp   Rv   Rz   R   R   R~   R   R   t   FalseR   R   R   R   (    (    (    s-   lib/python2.7/site-packages/numba/lowering.pyRB   L   s$   '							 						t   Lowerc           B` s   e  Z e j 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 RS(   c         C` s  |  j  j |  j |  j  |  j t |   t | t j  r~ |  j	 | j
 j  } |  j | |  } |  j | | j
 j  nkt | t j  r?|  j | j j  } |  j | j } |  j | j } |  j	 | j j  } |  j j |  j | | t j  } | j t j d  k s&t d | j   |  j j | | |  nt | t j  rt|  j | j
 }	 |  j j |	  nut | t j  rl|  j  r|  j! j" |   d  S|  j | j# j  } |  j	 | j# j  }
 |  j$ j% } t | t j&  r|  j' j( |  j | |
 |  d  S| |
 k r8|  j j |  j | |
 |  } n  |  j j) |  j | |  } |  j' j* |  j |  n}t | t j+  rl|  j$ j, | } | d  k	 st  y |  j j. d |  } Wn- t/ k
 r|  j0 | j
 | j1 | j# |  SX|  j | j
 j  }	 |  j | j# j  } |  j	 | j# j  } |  j j |  j | | | j2 d  } | |  j |	 | j3 | f  Sn}t | t j4  r|  j5 |  n[t | t j6  r|  j$ j, | } | d  k	 st  |  j0 | j
 | j3 | j# |  St | t j7  r4|  j$ j, | } | d  k	 st  |  j0 | j8 | j9 | j# |  St | t j:  r_|  j | j
 j  }	 |  j | j3 j  } |  j	 | j
 j  } |  j	 | j3 j  } |  j$ j, | } | d  k	 st  t; j< } |  j j= j> |  } | j? |  j j= | j2 i   |  j j. | |  } | | j2 d k s$t  |  j j |  j | | | j2 d  } | |  j |	 | f  St | t j@  r|  jA | j#  net | t jB  rx|  j | j
 j  }	 |  j | j# j  } |  j$ j, | } |  j	 | j
 j  } |  j	 | j# j  } | d  k	 st  | j2 d | k s%t  |  j jC | jD |  } |  j j |  j | | | j2 d  } | |  j |	 | f  St | t jE  r|  jF |  nO x: tG jH   D], \ } } t | |  r| |  |  d  SqWt/ t |    d  S(   Ni   s   cond is not i1: %st   static_setitemi   i    (I   R   t   mark_locationRa   RU   R   t   strt
   isinstanceR   t   AssignR   t   targetRi   t   lower_assignt   storevart   Brancht   loadvart   condRP   t   truebrt   falsebrRW   t   castR   t   booleant   typeR   t   intt   AssertionErrort   cbrancht   JumpR   t   ReturnRL   R}   t   return_from_generatort   valueR    t   restypet   OptionalRK   t   return_optional_valuet   get_return_valuet   return_valuet   StaticSetItemt	   calltypesR)   t   get_functiont   NotImplementedErrort   lower_setitemt	   index_vart   argsRA   t   Printt   lower_printt   SetItemt   StoreMapt   dctt   keyt   DelItemt   operatort   delitemt   typing_contextt   resolve_value_typet   get_call_typet   Delt   delvart   SetAttrt   get_setattrt   attrt   StaticRaiset   lower_static_raiset   lower_extensionsR   (   R'   R!   t   tyt   valR   t   trt   flt   condtyt   predR   t   otyt   retvalt	   signaturet   implR   t   valuetyRA   t   targettyt   indextyt   opt   fnopt   _classt   func(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR   '  s    !+	! 	c         C` sm  |  j  | j  } |  j  | j  } |  j  | j  } |  j | j  } |  j | j  }	 |  j | j  }
 t j } |  j j j |  } | j |  j j | j	 i   |  j j
 | |  } t | t j  r |  j j |  j | | | j  } n | | j	 d k s
t  |  j j |  j | |
 | j	 d  } |  j j |  j | |	 | j	 d  } | |  j | | | f  S(   Ni    i   i   (   R   Ri   R   R   t   setitemRW   R   R   R   R   R   R   R   R   R   Ra   R   R   (   R'   t
   target_varR   t	   value_varR   R   R   RA   R   R   R   R   R   R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR     s&    	c         C` sK   | j  d  k r( |  j d  d |  j n |  j | j  | j d |  j d  S(   NRU   (   Rt   R)   Rv   RU   Ru   (   R'   R!   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR     s    c         C` s  | j  } t | t j t j t j f  r\ |  j j |  j | | j   } |  j	 | |  | St | t j
  r~ |  j | |  St | t j  r |  j | j  } |  j | j  } |  j j |  j | | |  } |  j	 | |  | St | t j  r|  j d | j  } t | t j  rz| j  } |  j j j |  }	 |  j j |  j |	 |  }
 |  j j |  j |
 |	 |  } n. |  j | j } |  j j |  j | | |  } |  j	 | |  | St | t j  r|  j | |  } |  j	 | |  | St t |  |   d  S(   Ns   arg.(   R   R   R   t   Constt   Globalt   FreeVarRW   t   get_constant_genericRa   t   increft   Exprt
   lower_exprt   VarR   Ri   R   R   t   ArgR   t   OmittedR   R   R   RA   t   Yieldt   lower_yieldR   R   (   R'   R   R!   R   t   resR   R   t   argtyt   pyvalt   valtyt   const(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR     s>    	!		!c   	      C` s   |  j  j | j } | j | k s( t  t j |  | | j  } | j   |  j	 | j
 j  } |  j | j
 j  } |  j j |  j | | |  j j  } |  j j |  j | |  } |  j j |  j |  | j   |  j j |  j | d   S(   N(   RL   t   yield_pointsRA   R!   R   R   t
   LowerYieldt	   live_varst   lower_yield_suspendR   R   Ri   R   RW   R   Ra   R   t
   yield_typeR   RK   R   t   lower_yield_resumeR  R)   (	   R'   t   rettyR!   t   ypt   yR   t   typt   yretR   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR	    s    

c         ` s   j  j j      | j } | j } | j } | j }  j | j  }  j | j  }	  j	 | j  }  j	 | j  }  j
 j |   j  j  j | |  j d  }  j  j  j | |	  j d  }    f d   }
     f d   } | t |  t |  f | | f  } | d  k	 rB|
 |  S| t |  |	 f | | f  } | d  k	 ry|
 |  S| | t |  f | | f  } | d  k	 r|
 |  S  j  j  j  j i   }  j  j   |  } |  j | | f  } |
 |  S(   Ni    i   c         ` s    j  j  j |   j    S(   N(   RW   R   Ra   t   return_type(   R
  (   t   restyR'   R   (    s-   lib/python2.7/site-packages/numba/lowering.pyt   cast_result  s    c         ` s   t  d   | D  r d  SyI t   t j  rM   j  j j |  i   } n t j	  j
 |   } Wn t k
 rw d  SXy)  j j   |  } |  j |  SWn t k
 r d  SXd  S(   Nc         s` s   |  ] } | t  j k Vq d  S(   N(   R   t	   UNDEFINED(   t   .0t   a(    (    s-   lib/python2.7/site-packages/numba/lowering.pys	   <genexpr>  s    (   t   anyR)   R   R   t   FunctionR   RW   R   R   R   R  R   R   Ra   R   (   t   tysR   t
   static_sigt   static_impl(   R   R'   R   (    s-   lib/python2.7/site-packages/numba/lowering.pyt   try_static_impl  s    (   RW   R   R   t   lhst   rhst
   static_lhst
   static_rhsR   Ri   R   R    R   R   Ra   R   t   _lit_or_omittedR)   R   R   (   R'   R  t   exprR   R&  R'  R(  R)  t   ltyt   rtyR  R%  R
  t   sigR   (    (   R   R  R'   R   s-   lib/python2.7/site-packages/numba/lowering.pyt   lower_binop  sB    				%%


c         C` s  |  j  | j  } |  j  | j  } t j } |  j j j |  }	 |	 j |  j j | j i   |  j j	 |	 |  }
 | | f } |  j
 | j  |  j
 | j  f } g  t | | | j  D]- \ } } } |  j j |  j | | |  ^ q } |
 |  j |  } |  j j |  j | | j |  S(   N(   R   Ri   R   t   getitemRW   R   R   R   R   R   R   t   zipR   Ra   R  (   R'   R  R+  R   RA   R   t   basevalt   indexvalR   R   R   t   argvalst   argtypst   avt   att   ftt   castvalsR
  (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   lower_getitemI  s     		=c         C` s   t  | t  rU |  j | j j  | j } |  j j |  j | j j  | j  } n$ |  j | j  } |  j | j  } |  j	 j
 |  j | | |  S(   sh   
        Cast a Numba IR variable to the given Numba type, returning a
        low-level value.
        (   R   R?   R   R@   Ri   RA   Ra   t   extract_valueR   RW   R   (   R'   t   varR   t   vartyR   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt	   _cast_var]  s    c         ` s.  | re   j  | j  } t | t j  s0 t  | g  t t |   D] } t | |  ^ qF } n   j	 } | d  k r | r t d | f   n  g  t |  j  D] \ }	 }
   j |	 |
  ^ q } nZ    f d   }    f d   }    f d   } t j | | t |  | | |  } | S(   Ns-   unsupported keyword arguments when calling %sc         ` s     j  |  j |   S(   N(   R>  R   (   RA   t   paramR<  (   R'   R   (    s-   lib/python2.7/site-packages/numba/lowering.pyt   normal_handler}  s    c         ` s      j  j   j  j |  |  S(   N(   RW   R  Ra   R   (   RA   R?  t   default(   R'   R   (    s-   lib/python2.7/site-packages/numba/lowering.pyt   default_handler  s    	c         ` sr    j  |  } t | t j  s+ t |   g  t | |  D] \ } }   j | |  ^ q; } t j   j	 |  S(   N(
   R   R   R   t	   BaseTupleR   R1  R>  R
   t   make_anonymous_structRa   (   RA   R?  t   varst
   stararg_tyR<  t   sigtyt   values(   R'   R   (    s-   lib/python2.7/site-packages/numba/lowering.pyt   stararg_handler  s
    1(   R   Ri   R   R   RC  R   t   rangeR.   R?   t   pysigR)   R   R1  R   R>  R   t   fold_argumentst   dict(   R'   t   fntyR   t   pos_argsR@   t   kw_argst	   tp_varargt   iRK  R<  RG  R4  R@  RB  RI  (    (   R'   R   s-   lib/python2.7/site-packages/numba/lowering.pyt   fold_call_argsk  s*    /	7		c         C` s$  |  j  j | } | j t j k s( t  |  j j j t	  } t
 | j  } t
 | j  } x^ t t |   D]J } | | j k rn | j | } t | t  r t j |  | | <q qn qn Wt j | j |  } | j | _ |  j | | | | j i   }	 |  j j t	 |  }
 |
 |  j |	  d S(   s$   
        Lower a ir.Print()
        N(   R    R   R  R   t   noneR   RW   R   R   R   t   listR   RJ  R.   R&   R   R   t   literalR   R   RK  RS  R@   R   Ra   (   R'   R!   R.  RN  t   pos_tysRO  RR  R  t	   fixed_sigR4  R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR     s    c         C` s  |  j  j | } |  j d j |   t | j t j  rH |  j j	   St | j
 t j  rl | j
 j } n |  j | j
 j  } t | t j  r |  j | | |  } n t | t j  r |  j | | |  } ni t | t j  r |  j | | |  } n? t | t j  r)|  j | | |  } n |  j | | |  } | d  k r| j t j k rn|  j j	   } qt d d d |  j   n  |  j j |  j | | j |  S(   Ns   # lower_call: expr = {0}R   s2   non-void function returns None from implementationRU   (   R    R   R   R   R   R  R   t   PhantomRW   t   get_dummy_valueR   R   t	   IntrinsicRi   R   t   ObjModeDispatchert   _lower_call_ObjModeDispatchert   ExternalFunctiont   _lower_call_ExternalFunctiont   ExternalFunctionPointert#   _lower_call_ExternalFunctionPointert   RecursiveCallt   _lower_call_RecursiveCallt   _lower_call_normalR)   t   voidR   RU   R   Ra   (   R'   R  R+  R   RN  R
  (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt
   lower_call  s0    c         C` s  |  j    |  j j   } g  | j D] } | j ^ q# } g  | D] } |  j |  ^ q? } g  | D] } |  j |  ^ qa } x- t | |  D] \ }	 }
 |  j |
 |	  q Wg  t | |  D]' \ } } |  j j	 | | |  j
  ^ q } | j j t |   } |  j j |  j t |  d d } |  j j | |  } t j |  j |  } |  j j |  \ } } | I x | D] } |  j j |  qxW|  j j |  |  j j |  j  Wd  QX|  |  j j | j j |  } | j } |  j j |  x | D] } |  j j |  qWt | j  r3| j   n  |  j j |  |  j j | j    |  j j |  j  Wd  QX| SWd  QXWd  QXd  S(   Nt   infot   with_objectmode(!   Rg   R_   t
   gil_ensureR   Ri   R   R   R1  R  t   from_native_valueRc   t
   dispatchert   compilet   tupleRW   t   add_dynamic_addrRa   t   idt   call_function_objargsR
   t   is_nullt   if_elset   decreft   gil_releaseRK   t
   return_exct   to_native_valuet   output_typesR   t   callablet   cleanupt   if_thent   is_error(   R'   RN  R+  R   t	   gil_stateR  t   argnamesR   t	   argvaluest   vR   t   atypt   avalt   argobjst   entry_ptt   calleet   ret_objt   has_exceptiont   thent   orelset   objt   nativet   output(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR]    sH    
"":						c         C` s   |  j  d  |  j | | | j | j | j  } t j | j | j j	 | j j  } |  j
 j |  j j |  } |  j
 j |  j | | j |  S(   Ns   # external function(   R   RS  R   R@   t   kwsR   t   ExternalFunctionDescriptort   symbolR.  R  RW   t   declare_external_functionRa   RD   t   call_external_functionR   (   R'   RN  R+  R   R4  R    R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR_    s    		c         C` s  |  j  d  |  j | | | j | j | j  } |  j | j j  } | j r\|  j	   |  j
 j   } g  } g  } x t | j j | j |  D]s \ }	 }
 } |	 t j k r |  j |
 |  |  j
 j |
 | |  j  } | j |  | j |  q | j |  q W|  j j |  j | | | j  } x | D] } |  j
 j |  q/W|  j
 j |  n! |  j j |  j | | | j  } | S(   Ns#   # calling external function pointer(   R   RS  R   R@   R  R   R   Ri   t   requires_gilRg   R_   Ri  R1  R.  R   t   ffi_forced_objectR  Rj  Rc   R,   RW   t   call_function_pointerRa   t   cconvRs  Rt  (   R'   RN  R+  R   R4  t   pointerR|  t
   newargvalst   pyvalst   exptypt   gottypR  R  R
  (    (    s-   lib/python2.7/site-packages/numba/lowering.pyRa  '  s4    	
			c   	      C` s   |  j  | | | j | j | j  } | j | j } |  j j pC t } | | | j  } |  j j	 j
 j |  r |  j j |  j |  j | |  } n |  j j |  j | | |  } | S(   N(   RS  R   R@   R  t	   overloadsRW   t   manglerR   Ra   Rh   Ri   t
   startswitht   call_internalR    t   call_unresolved(	   R'   RN  R+  R   R4  t
   qualprefixR  t   mangled_nameR
  (    (    s-   lib/python2.7/site-packages/numba/lowering.pyRc  T  s    		c         C` s   |  j  d j |   |  j  d j |   t | j t j  sS t | t j  rb | j j } n$ |  j	 | | | j | j
 | j  } |  j j | |  } | j r |  j | j j  } | g t |  } n  | |  j | |  j  } | S(   Ns   # calling normal function: {0}s   # signature: {0}(   R   R   R   R   R   R[  R   R\  R   RS  R@   R  RW   R   t   recvrR   Ri   RU  Ra   RU   (   R'   RN  R+  R   R4  R   t   the_selfR
  (    (    s-   lib/python2.7/site-packages/numba/lowering.pyRd  g  s    	c   *   	   C` s  | j  d k r% |  j | | | j  S| j  d k r |  j | j j  } | j rh |  j | | | j  S|  j | | | j  SnK| j  d k rV|  j | j	 j  } |  j | j	 j  } |  j
 j j | j  } |  j j | } |  j
 j | |  } |  j
 j |  j | | | j d  } | |  j | g  }	 |  j
 j |  j |	 | j |  }	 |	 S| j  d k r{|  j | |  }	 |	 S| j  d k r|  j | j	 j  } |  j | j	 j  }
 |  j
 j |  j | |
  }	 |  j | |	  |	 S| j  d k rK|  j | j	 j  } |  j | j	 j  }
 |  j
 j |  j | |
  }	 |  j | |	  |	 S| j  d k r|  j | j	 j  } |  j | j	 j  }
 |  j j | } |  j
 j | j  |  } | j \ } |  j
 j |  j | |
 |  } | |  j | f  }	 |  j
 j |  j |	 | j |  }	 |	 S| j  d
 k r|  j | j	 j  } |  j | j	 j  }
 t |
 t j  r|  j
 j |  j | |
 |
 j  } |
 j }
 n  t |
 t j  r|
 | k st  |  j |
 |  | S|
 j j } |  j
 j  |  } t j! | t j"  } t# j$ |
 j |
  } |  j
 j d |  } t# j$ | |
 j  } |  j
 j d	 |  } | |  j | f  } x t% | j&  D] } | |  j | f  } |  j
 j |  j | |  } t' j( |  j |  j j) |    |  j* t+ d |  j, Wd  QX|  j
 j |  j | |  } |  j j- | | |  } qlW| |  j | f  } |  j
 j |  j | |  } t' j( |  j |   |  j* t+ d |  j, Wd  QX|  j. |
 j |  | S| j  d k r|  j | j	 j  } |  j | j	 j  }
 t | t j/  r.|  j
 j |  j | |
 | j0  } |  j
 j1 |  j | | j0  }	 |  j | |	  |	 S|  j
 j2 |
 | j3  } |  j
 j j4 |
 | j3  } | d  k rz|  j
 j6   S| |  j
 |  j |
 | | j3  }	 |  j
 j |  j |	 | |  }	 |	 Sn| j  d k rt# j$ | |  j | j	 j  t7 | j8   } yA |  j
 j d |  } | |  j |  j | j	 j  | j8 f  SWqt9 k
 r| j: d  k rb  n  |  j j | } |  j; | | | j	 | j: |  SXn7| j  d k r|  j j | } |  j; | | | j	 | j8 |  S| j  d k rg  | j< D] } |  j | j  ^ q} g  | j< D] } |  j | j  ^ q} g  t= | | |  D]- \ } } } |  j
 j |  j | | |  ^ qE} |  j
 j> |  j | |  } |  j | |  | S| j  d k rb	g  | j< D] } |  j | j  ^ q} g  | j< D] } |  j | j  ^ q} g  t= | |  D]- \ } } |  j
 j |  j | | | j?  ^ q	} |  j
 j@ |  j | |  S| j  d k r-
| j< d  d  d  }  g  |  D] } |  j | j  ^ q	} g  |  D] } |  j | j  ^ q	} g  t= | |  D]- \ } } |  j
 j |  j | | | j?  ^ q	} |  j
 jA |  j | |  S| j  d k r,| j< }  g  g  }! }" g  g  }# }$ x |  D] \ }% }& |  j |% j  }' |  j |% j  }( |  j |& j  } |  j |& j  }) |! jB |'  |" jB |  |# jB |(  |$ jB |)  qf
W|  j
 jC |  j | tD t= |# |$   tD t= |! |"    S| j  d k r|  j | j	 j  } |  j | j	 j  }
 |  j
 j |  j | |
 |  } |  j | |  | S| j  |  j
 jE k r|  j
 jE | j  |  |  }	 |	 St9 |   d  S(   Nt   binopt   inplace_binopt   unaryi    t   callt
   pair_firstt   pair_secondt   getitert   iternextt   exhaust_iterRU   t   getattrt   static_getitemR0  t   build_tuplet
   build_listt	   build_setit	   build_mapR   (   R  R  (F   R   R/  t   fnR   R&  Ri   t   mutablet   immutable_fnR   R   RW   R   R   R    R   R   R   Ra   R   R  Rf  R  R  R  R   R   R   R   RC  R   t   iterator_typeR  t   get_constant_undeft   PairR   R   R   RJ  t   countR
   t   if_unlikelyt   not_Rv   t
   ValueErrorRU   t   insert_valueRs  t   BoundFunctiont   thist   get_bound_functiont   get_getattrR   t   resolve_getattrR)   RZ  R*  RA   R   R   R:  R   R1  t
   make_tuplet   dtypeR  R  R,   R  RU  t   special_ops(*   R'   R  R+  R,  R   R  t   func_tyR   R   R
  R   t   ftyt   castvalt   itemtyt   tupt   pairtyt   getiter_sigt   getiter_implt   iternext_sigt   iternext_implt   iterobjRR  t   pairt   is_validt   itemt   castedt   attrtyt   itemvalst   itemtyst   totyt   fromtyR9  R   RS   RH  t	   key_typest   value_typest   kR  R   t   keytypet   valtype(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR  }  sF   	%	!		!!,((C((@%%@	c         C` sG   | |  j  k rC |  j j |  } |  j | |  } | |  j  | <n  d S(   sH   
        Ensure the given variable has an allocated stack slot.
        N(   RQ   RW   t   get_value_typet   alloca_lltype(   R'   Ri   t   fetypet   lltyt   ptr(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   _alloca_varO  s    c         C` s   |  j  | S(   s=   
        Get a pointer to the given variable's slot.
        (   RQ   (   R'   Ri   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   getvarZ  s    c         C` s   |  j  |  } |  j j |  S(   s2   
        Load the given variable's value.
        (   R  Ra   t   load(   R'   Ri   R  (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR   `  s    c      	   C` s   |  j  |  } |  j | |  |  j |  } |  j | |  |  j |  } | j | j j k r d j d | d | d | d |  } t |   n  |  j	 j
 | |  d S(   s:   
        Store the value into the given variable.
        sN   Storing {value.type} to ptr of {ptr.type.pointee} ('{name}'). FE type {fetype}R   R  R  Ri   N(   R   R  R   Rs  R  R   t   pointeeR   R   Ra   t   store(   R'   R   Ri   R  t   oldR  R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR   g  s    	c         C` sp   |  j  |  } |  j | |  |  j |  } |  j | |  j j |   |  j j t j | j	 j
  |  d S(   s,   
        Delete the given variable.
        N(   R   R  R  Rs  Ra   R  R  R   t   nullR   R  (   R'   Ri   R  R  (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR   ~  s
    c         C` s"   |  j  j |  } |  j | |  S(   N(   RW   R  R  (   R'   Ri   R   t   lltype(    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   alloca  s    c         C` s   | j  d  } t j |  j | d | d t } | r} |  j j |  } |  j j |  j | d | d | d | d |  j	 n  | S(   Nt   $Ri   t   zfillR  t   sizeRU   (
   R  R
   t   alloca_onceRa   R   RW   t   get_abi_sizeofR   t   mark_variableRU   (   R'   Ri   R  t
   is_uservart   aptrt   sizeof(    (    s-   lib/python2.7/site-packages/numba/lowering.pyR    s    c         C` s0   |  j  j s d  S|  j  j j |  j | |  d  S(   N(   RW   R   t   nrtR  Ra   (   R'   R  R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR    s    c         C` s0   |  j  j s d  S|  j  j j |  j | |  d  S(   N(   RW   R   R  Rs  Ra   (   R'   R  R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyRs    s    (   R#   R2   R   R   R   R   R   R   R	  R/  R:  R>  RS  R   Rf  R]  R_  Ra  Rc  Rd  R  R  R  R   R   R   R  R  R  Rs  (    (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR   $  s6   		w			,		D			'		)	A		-											c         C` s3   y t  j |   SWn t k
 r. t  j |   SXd S(   sj   Returns a Literal instance if the type of value is supported;
    otherwise, return `Omitted(value)`.
    N(   R   RV  R   R  (   R   (    (    s-   lib/python2.7/site-packages/numba/lowering.pyR*    s    (,   t
   __future__R    R   R   R5   R-   t   collectionsR   R   R   t	   functoolsR   t   llvmlite.llvmpy.coreR   R   R   R9   R	   R
   R   R   R   R   R   R   R   t   errorsR   R   R   R   t   targetsR   R   R   R   R+   R$   R?   t   objectRB   R   R   R*  (    (    (    s-   lib/python2.7/site-packages/numba/lowering.pyt   <module>   s,   @"(		
   