ó
\K]c           @   sL  d  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 d d l m Z m Z d d l m Z e e j ƒ d	 „  ƒ Z e	 e j ƒ d
 „  ƒ Z e e j ƒ d „  ƒ Z e e j ƒ d „  ƒ Z e	 e j ƒ d „  ƒ Z e e j ƒ d „  ƒ Z e	 e j ƒ d „  ƒ Z e e j ƒ d „  ƒ Z e	 e j ƒ d „  ƒ Z e e j ƒ d „  ƒ Z e	 e j ƒ e	 e j  ƒ d „  ƒ ƒ Z! e e j" ƒ d „  ƒ Z# e	 e j" ƒ d „  ƒ Z$ e e j% ƒ d „  ƒ Z& e	 e j% ƒ d „  ƒ Z' e e j( ƒ d „  ƒ Z) e e j* ƒ d „  ƒ Z+ e	 e j* ƒ d „  ƒ Z, e e j- ƒ d „  ƒ Z. e	 e j- ƒ d „  ƒ Z/ e e j0 ƒ d „  ƒ Z1 e	 e j0 ƒ d „  ƒ Z2 e e j3 ƒ d „  ƒ Z4 e	 e j3 ƒ d  „  ƒ Z5 e	 e j6 ƒ d! „  ƒ Z7 e e j8 ƒ d" „  ƒ Z9 e e j: ƒ d# „  ƒ Z; e	 e j< ƒ d$ „  ƒ Z= e	 e j8 ƒ d% „  ƒ Z> e	 e j: ƒ d& „  ƒ Z? e
 e j: ƒ d' „  ƒ Z@ e e jA ƒ e e jB ƒ d( „  ƒ ƒ ZC e e jD ƒ e e jE ƒ d) „  ƒ ƒ ZF e	 e jG ƒ d* „  ƒ ZH e e jI ƒ d+ „  ƒ ZJ d, eK f d- „  ƒ  YZL d. „  ZM e	 e jI ƒ d/ „  ƒ ZN e
 e jI ƒ d0 „  ƒ ZO d1 „  ZP e	 e jQ ƒ d2 „  ƒ ZR d3 „  ZS e e jQ ƒ d4 „  ƒ ZT e
 e jQ ƒ d5 „  ƒ ZU e e jV ƒ d6 „  ƒ ZW e	 e jV ƒ d7 „  ƒ ZX e e jY ƒ d8 „  ƒ ZZ e	 e jY ƒ d9 „  ƒ Z[ e e j\ ƒ d: „  ƒ Z] e	 e j\ ƒ d; „  ƒ Z^ e e j_ ƒ e e j` ƒ d< „  ƒ ƒ Za e	 e j_ ƒ e	 e j` ƒ d= „  ƒ ƒ Zb e	 e jc ƒ d> „  ƒ Zd e e je ƒ d? „  ƒ Zf e	 e je ƒ d@ „  ƒ Zg e	 e jh ƒ dA „  ƒ Zi dB „  Zj dC „  Zk e e jl ƒ dD „  ƒ Zm e e jn ƒ dE „  ƒ Zo e	 e jn ƒ dF „  ƒ Zp e	 e jq ƒ dG „  ƒ Zr dH S(I   sG   
Boxing and unboxing of native Numba values to / from CPython objects.
iÿÿÿÿ(   t   iri   (   t   cgutilst   numpy_supportt   types(   t   boxt   unboxt   reflectt   NativeValuei   (   t   listobjt   setobj(   t   IS_PY3c         C   s+   | j  j | | j j ƒ } | j j | ƒ S(   N(   t   buildert   zextt   pyapit   longt   bool_from_long(   t   typt   valt   ct   longval(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_bool   s    c         C   sX   | j  j | ƒ } t j | j d ƒ } | j j d | | ƒ } t | d | j  j ƒ  ƒS(   Ni    s   !=t   is_error(	   R   t   object_istrueR    t   Constantt   typeR   t   icmp_signedR   t   c_api_error(   R   t   objR   t   istruet   zeroR   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_boolean   s    c         C   s4   | j  j | j | |  |  j ƒ } | j |  j | ƒ S(   N(   t   contextt   castR   t   literal_typeR   (   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_literal_integer   s    !c         C   sc   |  j  r4 | j j | | j j ƒ } | j j | ƒ S| j j | | j j ƒ } | j j | ƒ Sd  S(   N(	   t   signedR   t   sextR   t   longlongt   long_from_longlongR   t	   ulonglongt   long_from_ulonglong(   R   R   R   t   ivalt   ullval(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_integer%   s
    	c         C   sÙ   | j  j |  ƒ } t j | j | ƒ } | j j | ƒ } | j j | ƒ g |  j rj | j j	 | ƒ } n | j j
 | ƒ } | j j | ƒ | j j | j j | | ƒ | ƒ Wd  QXt | j j | ƒ d | j j ƒ  ƒS(   NR   (   R   t   get_argument_typeR   t   alloca_onceR   R   t   number_longt   if_object_okR#   t   long_as_longlongt   long_as_ulonglongt   decreft   storet   truncR   t   loadR   (   R   R   R   t   ll_typeR   t   longobjt   llval(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_integer.   s    	(c         C   sX   |  t  j k r- | j j | | j j ƒ } n |  t  j k sB t ‚ | } | j j | ƒ S(   N(	   R   t   float32R   t   fpextR   t   doublet   float64t   AssertionErrort   float_from_double(   R   R   R   t   dbval(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt	   box_float>   s
    c         C   s›   | j  j | ƒ } | j  j | ƒ } | j  j | ƒ |  t j k rg | j j | | j j	 |  ƒ ƒ } n |  t j
 k s| t ‚ | } t | d | j  j ƒ  ƒS(   NR   (   R   t   number_floatt   float_as_doubleR2   R   R:   R   t   fptruncR   R,   R=   R>   R   R   (   R   R   R   t   fobjR@   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_floatG   s    c         C   s§   | j  j | j |  d | ƒ} |  t j k rl | j j | j | j j ƒ } | j j | j	 | j j ƒ } n( |  t j
 k s t ‚ | j | j	 } } | j j | | ƒ S(   Nt   value(   R   t   make_complexR   R   t	   complex64R;   t   realR   R<   t   imagt
   complex128R>   t   complex_from_doubles(   R   R   R   t   cvalt   frealt   fimag(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_complexU   s    !c         C   s0  | j  j | j t j ƒ } | j j | | j ƒ  ƒ } t j	 | j | ƒ } t j
 | j | ƒ  | j j d d |  f ƒ Wd  QX|  t j k rÿ | j  j | j |  ƒ } | j  j | j | j t j t j ƒ | _ | j  j | j | j t j t j ƒ | _ n |  t j k st ‚ | } t | j ƒ  d | ƒS(   Nt   PyExc_TypeErrors   conversion to %s failedR   (   R   RH   R   R   RL   R   t   complex_adaptort   _getpointerR   t   is_falset   if_unlikelyt   err_set_stringRI   R    RJ   R=   R:   RK   R>   R   t	   _getvalue(   R   R   R   t   c128t   okt   failedt   cplx(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_complexa   s    c         C   s   | j  j ƒ  S(   N(   R   t	   make_none(   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_noney   s    c         C   s   t  | j j ƒ  ƒ S(   N(   R   R   t   get_dummy_value(   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt
   unbox_none}   s    c         C   s   | j  j | |  j ƒ S(   N(   R   t   create_np_datetimet	   unit_code(   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_npdatetimeƒ   s    c         C   s+   | j  j | ƒ } t | d | j  j ƒ  ƒS(   NR   (   R   t   extract_np_datetimeR   R   (   R   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_npdatetime‡   s    c         C   s   | j  j | |  j ƒ S(   N(   R   t   create_np_timedeltaRc   (   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_nptimedelta   s    c         C   s+   | j  j | ƒ } t | d | j  j ƒ  ƒS(   NR   (   R   t   extract_np_timedeltaR   R   (   R   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_nptimedelta‘   s    c         C   s=   | j  j t j ƒ } | j j | | ƒ } | j t j | ƒ S(   s0   
    Convert a raw pointer to a Python int.
    (   R   t   get_value_typeR   t   uintpR   t   ptrtointR   (   R   R   R   t   ll_intpt   addr(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_raw_pointer—   s    c         C   sL   | j  |  j | ƒ } | j j | j j |  j ƒ ƒ } | j j | | f ƒ S(   s6   
    Fetch an enum member given its native value.
    (   R   t   dtypeR   t   unserializet   serialize_objectt   instance_classt   call_function_objargs(   R   R   R   t   valobjt   cls_obj(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_enum¡   s    !c         C   s(   | j  j | d ƒ } | j |  j | ƒ S(   s=   
    Convert an enum member's value to its native value.
    RG   (   R   t   object_getattr_stringR   Rq   (   R   R   R   Rv   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt
   unbox_enum«   s    c         C   sj   t  j t  j d ƒ | j j j ƒ } | j j | t  j t  j d ƒ ƒ ƒ } | j	 j
 | | |  j | j ƒ S(   Ni    i   (   R    R   t   IntTypeR   t   pointeet   countR   t   bitcastt   PointerTypeR   t   recreate_recordRq   t   env_manager(   R   R   R   t   sizet   ptr(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt
   box_record¸   s    $'c            sˆ   ˆ j  j ƒ  ‰  ˆ j  j | ˆ  ƒ } t j ˆ j | ƒ } ˆ j j |  ƒ } ˆ j j | | ƒ } ‡  ‡ f d †  } t	 | d | d | ƒS(   Nc              s   ˆ j  j ˆ  ƒ d  S(   N(   R   t   release_buffer(    (   t   bufR   (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   cleanupÉ   s    R‡   R   (
   R   t   alloca_buffert   extract_record_dataR   t   is_nullR   R   Rk   R~   R   (   R   R   R   Rƒ   R   t   ltypR   R‡   (    (   R†   R   s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_recordÀ   s    c         C   s>  t  j | j d | ƒ} | j j | | j j ƒ } | j j t j	 |  j
 ƒ } | j d ƒ } | j d ƒ } t  j | j | ƒ } t  j | j | g | j ƒ x \ }	 | j j | j j | |	 g ƒ ƒ }
 | j j t  j | j |
 ƒ ƒ ' | j j | j j |	 | ƒ | ƒ Wd  QXWd  QX| j j | ƒ } | j j | | ƒ S(   NRG   i    i   (   R   t   alloca_once_valueR   R~   R   t   cstringR   t   get_constantR   t   intpR}   R   t	   loop_nestR5   t   gept   if_thent   is_not_nullR3   t   addt   bytes_from_string_and_size(   R   R   R   t   rawptrt   strptrt   fullsizeR   t   oneR}   t   idxt   cht   strlen(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_charseqÎ   s    $$".c      	   C   s  | j  j |  ƒ } | j j | ƒ \ } } } t j | j | ƒ Ÿ t j | j	 |  j
 ƒ } | j j d | | ƒ } | j j | | | ƒ } t j | d  ƒ }	 t j | j |	 ƒ }
 t j | j | j j |
 | j	 ƒ | | ƒ Wd  QX| j j |
 ƒ } t | d | j j | ƒ ƒS(   Ns   <=R   (   R   Rk   R   t   string_as_string_and_sizeR   t	   if_likelyR   R    R   R   R}   t   icmp_unsignedt   selectt   NoneR   t   memcpyR~   R5   R   t   not_(   R   R   R   t   ltyRZ   t   bufferR‚   t   storage_sizet	   size_fitst   null_stringt   outspacet   ret(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_charseqä   s    c         C   sÎ   | j  j | j |  | ƒ } t j | j | j j ƒ  ƒ } | j j | j ƒ n \ } } | 0 | j	 |  j
 | j ƒ } | j j | | ƒ Wd  QX| ! | j j | j j ƒ  | ƒ Wd  QXWd  QX| j j | ƒ S(   N(   R   t   make_helperR   R   R   R   t   borrow_nonet   if_elset   validR   R   t   dataR3   R^   R5   (   R   R   R   t   optvalR¬   t   thent	   otherwiset   validres(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_optional   s    (c            sz  ˆ  j  j ˆ  j |  j ƒ } ˆ  j j d | ˆ  j j ƒ  ƒ ‰ t j ˆ  j | j ƒ } t j	 ˆ  j t j
 ƒ } ˆ  j j ˆ ƒ ™ \ } } | d ˆ  j |  j | ƒ ‰ ˆ  j  j ˆ  j |  j ˆ j ƒ } ˆ  j j | | ƒ ˆ  j j ˆ j | ƒ Wd QX|  ˆ  j j | | ƒ Wd QXWd QXˆ j d k	 r@‡  ‡ ‡ f d †  }	 n d }	 ˆ  j j | ƒ }
 t |
 d ˆ  j j | ƒ d |	 ƒS(   s>   
    Convert object *obj* to a native optional structure.
    s   !=Nc              s'   ˆ  j  j ˆ ƒ  ˆ j ƒ  Wd  QXd  S(   N(   R   R“   R‡   (    (   R   t   is_not_nonet   native(    s3   lib/python2.7/site-packages/numba/targets/boxing.pyR‡   $  s    R   R‡   (   R   t   make_optional_noneR   R   R   R   R¯   R   R-   R   t	   false_bitR°   R   t   make_optional_valueRG   R3   R   R‡   R£   R5   R   (   R   R   R   t   nonevalt   retptrt   errptrR´   t   orelset   justR‡   R¬   (    (   R   R¸   R¹   s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_optional  s&    !c   	      C   sƒ   d d l  m } | j j | ƒ \ } } } } | j j | j |  ƒ } | | _ | | _ | | _	 t
 | j ƒ  d | j j | ƒ ƒS(   s;   
    Convert object *obj* to a native slice structure.
    i   (   t   slicingR   (   t    RÃ   R   t   slice_as_intsR   R®   R   t   startt   stopt   stepR   RX   R¥   (	   R   R   R   RÃ   RZ   RÆ   RÇ   RÈ   t   sli(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_slice/  s    			c   	      C   s¦   | j  j |  ƒ } | | j  | j d | ƒ} | j  j r… t j |  j ƒ } | j j | j j	 | ƒ ƒ } | j
 j |  | | ƒ } | S| j } | j
 j | ƒ | Sd  S(   NRG   (   R   t
   make_arrayR   t
   enable_nrtR   t   as_dtypeRq   R   t
   read_constt	   add_constR   t   nrt_adapt_ndarray_to_pythont   parentt   incref(	   R   R   R   t   nativearyclst	   nativearyt   np_dtypet   dtypeptrt   newaryRÑ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt	   box_arrayD  s    	c         C   s  | j  j | j |  d | ƒ} | j } t j | j | ƒ } | j j t j | j | ƒ ƒ –\ } } | È | j j	 | ƒ | j j
 d ƒ } | j j | d | g ƒ }	 | j j t j | j |	 ƒ ƒ S \ }
 } |
  | j j |	 ƒ Wd  QX| ! | j j | j j ƒ  | ƒ Wd  QXWd  QX| j j | ƒ Wd  QX| ± | j j | j j |  j ƒ ƒ } | j |  j | j ƒ } | j j t j ƒ } | j j | | | f ƒ } | j j | ƒ | j j | ƒ | j j | ƒ | j j | | ƒ Wd  QXWd  QX| j j | ƒ S(   NRG   t   hostt   mark_changed(   R   R®   R   RÑ   R   R   R°   R”   R   RÒ   t   string_from_constant_stringt   call_methodR2   R3   t   get_null_objectRr   Rs   t   pyclassR   t   as_arrayR²   t   bool_from_boolR»   Ru   R5   (   R   RG   R   t   aR   t   rest
   has_parentRµ   RÙ   t   retnt   successt   failuret   classobjt   arrayobjt   false(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_smart_arrayS  s0    	**(!c   
         s  ˆ j  j ƒ  ‰  ˆ j  j | ˆ  ƒ } t j ˆ j | ƒ } ˆ j j |  ƒ } | ˆ j ˆ j ƒ } | j ƒ  } t j	 ˆ j ˆ j j
 | ƒ ƒ U ˆ j j | ˆ j  j ƒ } ˆ j j rË ˆ j  j ˆ  | ƒ n ˆ j  j ˆ  | ƒ Wd QX‡  ‡ f d †  }	 t ˆ j j | ƒ d | d |	 ƒS(   sK   
    Convert a Py_buffer-providing object to a native array structure.
    Nc              s   ˆ j  j ˆ  ƒ d  S(   N(   R   R…   (    (   R†   R   (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyR‡   ˆ  s    R   R‡   (   R   Rˆ   t
   get_bufferR   R”   R   R   RË   RT   R    R¥   R~   t   voidptrRÌ   t   nrt_adapt_buffer_from_pythont   numba_buffer_adaptorR   R5   (
   R   R   R   Râ   R   RÓ   RÔ   t   aryptrRƒ   R‡   (    (   R†   R   s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_buffert  s    "c         C   s\  | j  j |  ƒ } | | j  | j ƒ } | j ƒ  } | j j | | j j ƒ } | j  j rr | j j | | ƒ } n | j j	 | | ƒ } y t
 j |  j ƒ j } Wn t k
 r¼ t j }	 n. X| j j | ƒ } | j j d | j | ƒ }	 | j j t j | j | ƒ |	 ƒ }
 | j j |
 d t ƒ | j j d d ƒ Wd QXt | j j | ƒ d |
 ƒS(   sC   
    Convert a Numpy array object to a native array structure.
    s   !=t   likelyRR   sX   can't unbox array from PyObject into native value.  The object maybe of a different typeNR   (   R   RË   R   RT   R~   R   Rì   RÌ   t   nrt_adapt_ndarray_from_pythont   numba_array_adaptorR   RÍ   Rq   t   itemsizet   NotImplementedErrorR   R»   R   R¡   t   or_R”   R“   t   FalseRW   R   R5   (   R   R   R   RÓ   RÔ   Rï   Rƒ   t   errcodet   expected_itemsizet   itemsize_mismatchR[   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_arrayŽ  s.    
				c         C   sð   | j  j | j |  ƒ } | j j d ƒ } | j j | d | g ƒ } | j j t j | j | ƒ ƒ h \ } } | 9 | j	 |  j
 | ƒ j | _ | | _ | j j | ƒ Wd  QX|  | j j ƒ  Wd  QXWd  QX| j j | ƒ t | j ƒ  ƒ S(   NRÙ   t   get(   R   R®   R   R   RÛ   RÜ   R°   R   R”   R   Rß   RG   R²   RÑ   R2   t   raise_objectR   RX   (   R   R   R   Rá   RÙ   t   arrRå   Ræ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_smart_array¾  s    *	c   	   
   C   sÌ   | j  j | j |  | ƒ } | j } | j j d ƒ } | j j | d | g ƒ } | j j t j	 | j | ƒ ƒ D \ } } |  | j j
 | ƒ Wd  QX|  | j j ƒ  Wd  QXWd  QX| j j
 | ƒ d  S(   NRÙ   RÚ   (   R   R®   R   RÑ   R   RÛ   RÜ   R°   R   R”   R2   Rý   (	   R   RG   R   Rá   Rþ   RÙ   Rä   Rå   Ræ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   reflect_smart_arrayÏ  s    	*c         C   ss   | j  j |  j ƒ } xW t |  ƒ D]I \ } } | j j | | ƒ } | j | | ƒ } | j  j | | | ƒ q" W| S(   sD   
    Convert native array or structure *val* to a tuple object.
    (   R   t	   tuple_newR}   t	   enumerateR   t   extract_valueR   t   tuple_setitem(   R   R   R   t	   tuple_valt   iRq   t   itemR   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt	   box_tupleÝ  s    c         C   sl   | j  j | j  j |  j ƒ ƒ } t |  | | ƒ } | j  j | | ƒ } | j  j | ƒ | j  j | ƒ | S(   sI   
    Convert native array or structure *val* to a namedtuple object.
    (   R   Rr   Rs   Rt   R  t   callR2   (   R   R   R   Rw   t	   tuple_objR   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_namedtupleì  s    !c      	      s5  t  |  ƒ } g  } g  ‰  | j j |  ƒ } t j | j t j ƒ } t j | j | ƒ } | j j	 | ƒ } | j j
 d | t j | j | ƒ ƒ }	 | j j | j j |	 ƒ d t ƒ8 | j j d d | f | ƒ | j j t j | ƒ Wd QXx« t |  ƒ D] \ }
 } | j j | |
 ƒ } | j | | ƒ } | j | j ƒ | j j | j d t ƒ | j j t j | ƒ Wd QX| j d k	 rû ˆ  j | j ƒ qû qû W| j j | j |  | ƒ } | j j | | ƒ ˆ  r| j j |	 d t ƒ ‡  f d †  } Wd QXn d } t | j j | ƒ d | d | j j | ƒ ƒS(	   sN   
    Convert tuple *obj* to a native array (if homogeneous) or structure.
    s   ==Rñ   t   PyExc_ValueErrors<   size mismatch for tuple, expected %d element(s) but got %%zdNc             s"   x t  ˆ  ƒ D] }  |  ƒ  q Wd  S(   N(   t   reversed(   t   func(   t   cleanups(    s3   lib/python2.7/site-packages/numba/targets/boxing.pyR‡   "  s    R‡   R   (    t   lenR   Rk   R   R   R   R»   R-   R   t
   tuple_sizeR¡   R    R   R   R“   R¥   R÷   t
   err_formatR3   t   true_bitR  t   tuple_getitemR   t   appendRG   R   R‡   R£   t
   make_tuplet   TrueR   R5   (   R   R   R   t   nt   valuesR¦   t   is_error_ptrt	   value_ptrt   actual_sizet   size_matchesR  t   eltypet   elemR¹   RG   R‡   (    (   R  s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_tupleú  s>    %	
c         C   s‰  t  j | j | j |  | ƒ } | j } t j | j | ƒ } | j j t j | j | ƒ ƒ þ \ } } |  | j	 j
 | ƒ Wd QX| Ì | j } | j	 j | ƒ } | j j t j | j | ƒ d t ƒp t j | j | ƒ T }	 | j |	 j ƒ }
 | j |
 ƒ | j |  j |
 ƒ } | j	 j | |	 j | ƒ Wd QXWd QX| j j | | ƒ Wd QXWd QX| j j j | j |  | ƒ | j j | ƒ S(   s5   
    Convert native list *val* to a list object.
    NRñ   (   R   t   ListInstanceR   R   RÑ   R   R   R°   R”   R   RÒ   R‚   t   list_newR“   R  t	   for_ranget   getitemt   indext   incref_valueR   Rq   t   list_setitemR3   t   nrtR2   R5   (   R   R   R   t   listR   Râ   Rã   Rµ   t   nitemst   loopR  t   itemobj(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_list,  s&    	*	
%t   _NumbaTypeHelperc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sÿ  A helper for acquiring `numba.typeof` for type checking.

    Usage
    -----

        # `c` is the boxing context.
        with _NumbaTypeHelper(c) as nth:
            # This contextmanager maintains the lifetime of the `numba.typeof`
            # function.
            the_numba_type = nth.typeof(some_object)
            # Do work on the type object
            do_checks(the_numba_type)
            # Cleanup
            c.pyapi.decref(the_numba_type)
        # At this point *nth* should not be used.
    c         C   s   | |  _  d  S(   N(   R   (   t   selfR   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   __init___  s    c         C   sh   |  j  } | j j | j j d ƒ } | j j | ƒ } | j j | d ƒ } | |  _ | j j	 | ƒ |  S(   Nt   numbat   typeof(
   R   R   t   insert_const_stringR   t   moduleR   t   import_module_noblockRy   t	   typeof_fnR2   (   R/  R   t
   numba_namet	   numba_modR6  (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt	   __enter__b  s    		c         O   s    |  j  } | j j |  j ƒ d  S(   N(   R   R   R2   R6  (   R/  t   argst   kwargsR   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   __exit__k  s    	c         C   s"   |  j  j j |  j | g ƒ } | S(   N(   R   R   Ru   R6  (   R/  R   Râ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyR2  o  s    (   t   __name__t
   __module__t   __doc__R0  R9  R<  R2  (    (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyR.  N  s
   				c            s«  ‡  ‡ ‡ f d †  } t  j j ˆ  j ˆ  j |  | ƒ \ } } ˆ  j j | d t ƒ\ }	 }
 |	 Õ| | _ t j	 | j
 d ƒ } ˆ  j j ˆ  j j d | | ƒ d t ƒt ˆ  ƒ î } | j ˆ  j j | | ƒ ƒ } t j ˆ  j | ƒ ¢ ‰ ˆ  j j | ˆ j ƒ } | | | | ƒ ˆ  j |  j | ƒ } ˆ  j j | j d t ƒ% ˆ  j j t j ˆ ƒ ˆ j ƒ  Wd QX| j ˆ j | j d t ƒWd QXˆ  j j | ƒ Wd QXWd QX|  j rÄ| | _ n  ˆ  j j ˆ  j j  ˆ  j j! ˆ ƒ ƒ d t ƒ ˆ  j j" | | j# ƒ Wd QX| j$ t ƒ ˆ  j j | j | ƒ Wd QX|
  ˆ  j j t j ˆ ƒ Wd QXWd QXˆ  j j ˆ  j j! ˆ ƒ ƒ $ ˆ  j j% j ˆ  j |  | j ƒ Wd QXd S(   s9   
    Construct a new native list from a Python list.
    c      
      s  |  j  | ƒ } ˆ  j j t j ˆ  j | ƒ d t ƒ% ˆ  j j t j ˆ ƒ ˆ j ƒ  Wd  QXˆ  j j	 d | | ƒ } ˆ  j j | d t ƒj ˆ  j j t j ˆ ƒ t
 rÆ ˆ  j j d d | | ƒ n ˆ  j j d d ƒ ˆ  j j | ƒ ˆ j ƒ  Wd  QXˆ  j j | ƒ d  S(   NRñ   s   !=RR   s(   can't unbox heterogeneous list: %S != %Ss   can't unbox heterogeneous list(   R2  R   R“   R   RŠ   R÷   R3   R  t   do_breakR   R
   R   R  RW   R2   (   t   nthR,  t   expected_typobjt   typobjt   type_mismatch(   R   t   errorptrR+  (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   check_element_typex  s(    	
		Rñ   i    t   >NRÒ   (&   R   R!  t   allocate_exR   R   R°   R  R‚   R    R   R   R“   R   R.  R2  R   t   list_getitemR   R#  R%  R   Rq   R   R÷   R3   R  R@  t   setitemRG   R2   t	   reflectedRÑ   R¥   R5   t   object_set_private_datat   meminfot	   set_dirtyR(  (   R   R   R   R‚   t   listptrRE  RF  RZ   R)  t   if_okt	   if_not_okR   RA  RB  R,  R¹   (    (   R   RE  R+  s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   _python_list_to_nativet  s<    '!	!
"	'
"c            sU  ˆ  j  j ˆ ƒ } t j ˆ  j t j ƒ } t j ˆ  j ˆ  j j |  ƒ ƒ } ˆ  j  j	 ˆ ƒ } ˆ  j j
 t j ˆ  j | ƒ ƒ • \ } } | Z t j j ˆ  j ˆ  j |  | ƒ }	 | |	 _ |  j rÍ ˆ |	 _ n  ˆ  j j |	 j | ƒ Wd QX|  t |  ˆ ˆ  | | | ƒ Wd QXWd QX‡  ‡ f d †  }
 t ˆ  j j | ƒ d ˆ  j j | ƒ d |
 ƒS(   s   
    Convert list *obj* to a native list.

    If list was previously unboxed, we reuse the existing native list
    to ensure consistency.
    Nc              s   ˆ  j  j ˆ ƒ d  S(   N(   R   t   object_reset_private_data(    (   R   R   (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyR‡   ß  s    R   R‡   (   R   t	   list_sizeR   R   R   R»   R-   R   Rk   t   object_get_private_dataR°   R”   R   R!  t   from_meminfoR‚   RK  RÑ   R3   RG   RR  R   R5   (   R   R   R   R‚   RE  RO  Rƒ   t   has_meminfoRµ   R)  R‡   (    (   R   R   s3   lib/python2.7/site-packages/numba/targets/boxing.pyt
   unbox_listÁ  s$    !!	!		%c         C   sœ  |  j  s d S|  j j  r7 d j |  ƒ } t | ƒ ‚ n  t j | j | j |  | ƒ } | j j | j	 d t
 ƒ&| j } | j j | ƒ } | j } | j j | | ƒ } | j j d | t j | j d ƒ ƒ }	 | j j |	 ƒ  \ }
 } |
 ú t j | j | ƒ T } | j | j ƒ } | j | ƒ | j |  j | ƒ } | j j | | j | ƒ Wd QXt j | j | ƒ s } | j j | | j ƒ } | j | ƒ } | j | ƒ | j |  j | ƒ } | j j | | ƒ | j j | ƒ Wd QXWd QX| ‰ | j j | | | d ƒ t j | j | ƒ T } | j | j ƒ } | j | ƒ | j |  j | ƒ } | j j | | j | ƒ Wd QXWd QXWd QX| j! t
 ƒ Wd QXd S(   sD   
    Reflect the native list's contents into the Python object.
    Ns2   cannot reflect element of reflected container: {}
Rñ   s   >=i    ("   RK  Rq   t   formatt	   TypeErrorR   R!  R   R   R“   t   dirtyR÷   RÑ   R   RT  R‚   t   subR   R    R   R   R°   R   R#  R$  R%  R&  R   R'  R•   t   list_appendR2   t   list_setsliceR£   RN  (   R   R   R   t   msgR)  R   R‚   t   new_sizet   difft	   diff_gt_0t   if_growt	   if_shrinkR+  R  R,  R›   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   reflect_listè  sF    			+c         C   sð  t  j j | j | j |  | ƒ \ } } | j j | d t ƒg\ } }	 | /t j | j t	 j
 | j j d ƒ ƒ }
 | j j | ƒ j} | j } | j j | ƒ } | j j |
 ƒ } | j j t j | j | ƒ d t ƒ¤ \ } } |  | j j | |
 ƒ Wd QX| o | j j d | | ƒ } | j j | d t ƒ8 | j j t j | ƒ | j j d d ƒ | j ƒ  Wd QXWd QXWd QX| j |  j | ƒ } | j j | j d t ƒ | j j t j | ƒ Wd QX| j | j | j d t ƒWd QX|  j r	| | _ n  | j j | j j  | j j | ƒ ƒ d t ƒ | j j! | | j" ƒ Wd QX| j# t ƒ | j j | j | ƒ Wd QX|	  | j j t j | ƒ Wd QXWd QX| j j | j j | ƒ ƒ $ | j j$ j% | j |  | j ƒ Wd QXd S(   s7   
    Construct a new native set from a Python set.
    Rñ   Ns   !=RR   s   can't unbox heterogeneous sett	   do_resize(&   R	   t   SetInstanceRH  R   R   R°   R  R   R   R    R   R   t   pyobjR£   t   set_iterateRG   t   get_typeR5   RŠ   R÷   R3   R   R“   R  RW   R@  R   Rq   R   t	   add_pyapiRK  RÑ   R¥   RL  RM  RN  R(  R2   (   R   R   R   R‚   t   setptrRE  RZ   t   instRP  RQ  t	   typobjptrR+  R,  RC  RB  t   if_firstt   if_not_firstRD  R¹   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   _python_set_to_native  sJ    '!			"	'
"c            sL  ˆ  j  j ˆ ƒ } t j ˆ  j t j ƒ } t j ˆ  j ˆ  j j |  ƒ ƒ } ˆ  j  j	 ˆ ƒ } ˆ  j j
 t j ˆ  j | ƒ ƒ Œ \ } } | Q t j j ˆ  j ˆ  j |  | ƒ }	 |  j rÄ ˆ |	 _ n  ˆ  j j |	 j | ƒ Wd QX|  t |  ˆ ˆ  | | | ƒ Wd QXWd QX‡  ‡ f d †  }
 t ˆ  j j | ƒ d ˆ  j j | ƒ d |
 ƒS(   sŒ   
    Convert set *obj* to a native set.

    If set was previously unboxed, we reuse the existing native set
    to ensure consistency.
    Nc              s   ˆ  j  j ˆ ƒ d  S(   N(   R   RS  (    (   R   R   (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyR‡   s  s    R   R‡   (   R   t   set_sizeR   R   R   R»   R-   R   Rk   RU  R°   R”   R	   Rg  RV  RK  RÑ   R3   RG   Rq  R   R5   (   R   R   R   R‚   RE  Rl  Rƒ   RW  Rµ   Rm  R‡   (    (   R   R   s3   lib/python2.7/site-packages/numba/targets/boxing.pyt	   unbox_setV  s"    !!	!	%c         C   s  | j  } | j j | ƒ } t j | j | ƒ } | j j | d t ƒ¾ t j | j t	 j
 | j d ƒ ƒ } | j ƒ  ‡ } | j j | ƒ } | j j }	 | j |  j |	 ƒ }
 | j j | | |
 ƒ | j j | t	 j
 | j d ƒ ƒ } | j j | | ƒ Wd QXWd QX| | f S(   s9   
    Create a Python list from a native set's items.
    Rñ   i    i   N(   t   usedR   R"  R   R”   R   R“   R  R   R    R   R   t   _iterateR5   t   entryt   keyR   Rq   R'  R•   R3   (   R   t   payloadR   R*  R   RZ   R%  R+  R  R  R,  (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   _native_set_to_python_list|  s    	$c         C   s7  t  j | j | j |  | ƒ } | j } t j | j | ƒ } | j j t j | j | ƒ ƒ ¬ \ } } |  | j	 j
 | ƒ Wd QX| z | j } t |  | | ƒ \ }	 }
 | j j |	 d t ƒ: | j	 j |
 ƒ } | j	 j |
 ƒ | j j | | ƒ Wd QXWd QXWd QX| j j j | j |  | ƒ | j j | ƒ S(   s3   
    Convert native set *val* to a set object.
    NRñ   (   R	   Rg  R   R   RÑ   R   R   R°   R”   R   RÒ   Rx  Ry  R“   R  t   set_newR2   R3   R(  R5   (   R   R   R   Rm  R   Râ   Rã   Rµ   Rx  RZ   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_set‘  s    	*	%c         C   sÚ   |  j  s d St j | j | j |  | ƒ } | j } | j j | j d t ƒ… | j	 } | j
 j | ƒ t |  | | ƒ \ } } | j j | d t ƒ( | j
 j | | ƒ | j
 j | ƒ Wd QX| j t ƒ Wd QXd S(   sC   
    Reflect the native set's contents into the Python object.
    NRñ   (   RK  R	   Rg  R   R   Rx  R“   R[  R÷   RÑ   R   t	   set_clearRy  R  t
   set_updateR2   RN  (   R   R   R   Rm  Rx  R   RZ   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   reflect_set®  s    			c         C   s   | j  j | |  | j j ƒ S(   N(   R   t   from_native_generatorR   t   env_ptr(   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_generatorË  s    c         C   s   | j  j | |  ƒ S(   N(   R   t   to_native_generator(   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_generatorÏ  s    c         C   s.   t  j |  j ƒ } | j j | j j | ƒ ƒ S(   N(   R   RÍ   Rq   R   Rr   Rs   (   R   R   R   RÕ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt	   box_dtypeÔ  s    c         C   s   t  | j j ƒ  ƒ S(   N(   R   R   R`   (   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_dtypeÙ  s    c         C   s.   t  j |  j ƒ } | j j | j j | ƒ ƒ S(   N(   R   RÍ   Rq   R   Rr   Rs   (   R   R   R   RÕ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_number_classÞ  s    c         C   s   t  | j j ƒ  ƒ S(   N(   R   R   R`   (   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_number_classã  s    c         C   s   | S(   N(    (   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_pyobjectè  s    c         C   s
   t  | ƒ S(   N(   R   (   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_pyobjectí  s    c   	      C   se  |  j  d  k r t |  ƒ ‚ n  | j j |  ƒ } t j | j t j	 | d  ƒ d d ƒ} | j
 j |  j  ƒ } | j
 j | ƒ } t j | j t j | j | ƒ ƒ œ | j
 j | | f ƒ } | j
 j | ƒ t j | j t j | j | ƒ ƒ I | j
 j | ƒ } | j
 j | ƒ | j j | j j | | ƒ | ƒ Wd  QXWd  QXt | j j | ƒ d | j
 j ƒ  ƒS(   Nt   namet   fnptrR   (   t   get_pointerR£   Rõ   R   t   get_function_pointer_typeR   R   R   R    R   R   Rs   Rr   R    R”   Ru   R2   t   long_as_voidptrR3   R~   R   R5   R   (	   R   R   R   t   ptrtyR¬   t   serRŒ  t   intobjRƒ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_funcptró  s$    	.c         C   s:   | j  j |  j ƒ  | j j | d g ƒ d | j ƒ} | S(   Ni    R   (   R   t   from_native_valueRü   R   R  R   (   R   R   R   t   out(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_deferred
  s    c         C   sh   | j  j |  j ƒ  | ƒ } | j j |  } | j | j | j ƒ  | j ƒ } t	 | d | j
 d | j ƒS(   NR   R‡   (   R   t   to_native_valueRü   R   t   data_model_managert   setR   t   make_uninitializedRG   R   R   R‡   (   R   R   R   t   native_valuet   modelRâ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_deferred  s
    !c         C   s   | j  j |  ƒ } t | ƒ S(   N(   R   t   get_constant_undefR   (   R   R   R   Râ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_dispatcher  s    c         C   sA   | j  j d d j |  ƒ ƒ | j j |  ƒ } t | d t j ƒS(   NRR   s   can't unbox {!r} typeR   (   R   RW   RY  R   t   get_constant_nullR   R   R  (   R   R   R   Râ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_unsupported"  s    c         C   s3   d |  f } | j  j d | ƒ | j  j ƒ  } | S(   Ns)   cannot convert native %s to Python objectRR   (   R   RW   RÝ   (   R   R   R   R_  Râ   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_unsupported)  s    c         C   s%   |  j  } | j j | j j | ƒ ƒ S(   N(   t   literal_valueR   Rr   Rs   (   R   R   R   t   retval(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_literal0  s    	c         C   s   | j  j | ƒ S(   N(   R   t   nrt_meminfo_as_pyobject(   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   box_meminfo_pointer9  s    c         C   s7   | j  j | ƒ } t j | j | ƒ } t | d | ƒS(   NR   (   R   t   nrt_meminfo_from_pyobjectR   RŠ   R   R   (   R   R   R   Râ   t   errored(    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_meminfo_pointer>  s    c         C   s   t  | j j ƒ  d t j ƒS(   NR   (   R   R   R`   R   R»   (   R   R   R   (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   unbox_typerefD  s    N(s   R?  t   llvmliteR    RÄ   R   R   R   t	   pythonapiR   R   R   R   R   R	   t   utilsR
   t   BooleanR   R   t   IntegerLiteralR"   t   IntegerR+   R9   t   FloatRA   RF   t   ComplexRQ   R]   t   NoneTypeR_   t   EllipsisTypeRa   t
   NPDatetimeRd   Rf   t   NPTimedeltaRh   Rj   t
   RawPointerRp   t
   EnumMemberRx   Rz   t   RecordR„   RŒ   t   CharSeqRž   R­   t   OptionalR·   RÂ   t	   SliceTypeRÊ   t   ArrayRØ   t   SmartArrayTypeRê   t   BufferRð   Rû   Rÿ   R   t   Tuplet   UniTupleR  t
   NamedTuplet   NamedUniTupleR  t	   BaseTupleR   t   ListR-  t   objectR.  RR  RX  Re  Rq  t   SetRs  Ry  R{  R~  t	   GeneratorR  Rƒ  t   DTypeR„  R…  t   NumberClassR†  R‡  t   PyObjectt   ObjectRˆ  R‰  t   ExternalFunctionPointerR’  t   DeferredTypeR•  Rœ  t
   DispatcherRž  R   R¡  t   LiteralR¤  t   MemInfoPointerR¦  R©  t   TypeRefRª  (    (    (    s3   lib/python2.7/site-packages/numba/targets/boxing.pyt   <module>   s   "		

"!02"&	M'3	;&					