ó
\K]c           @   sr  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m Z d d l m	 Z	 d d l
 m Z m Z m Z m Z m Z m Z d d l m Z d d	 l m Z d d
 l m Z m Z m Z 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" m# Z# m$ Z$ m% Z% m& Z& m' Z' e j( Z) e j( Z* e j( Z+ e j, Z- e j. Z/ e/ Z0 e j( Z1 e j2 e j3 ƒ Z4 d e f d „  ƒ  YZ5 d e f d „  ƒ  YZ6 d „  Z7 e e ƒ d e j8 f d „  ƒ  Yƒ Z9 e e ƒ e e ƒ e e ƒ e e ƒ d e j8 f d „  ƒ  Yƒ ƒ ƒ ƒ Z: d „  Z; e d „  ƒ Z< e d „  ƒ Z= d „  Z> d „  Z? e d „  ƒ Z@ e d „  ƒ ZA e d „  ƒ ZB e d  „  ƒ ZC e d! „  ƒ ZD e d" „  ƒ ZE e d# „  ƒ ZF e d$ „  ƒ ZG d% „  ZH e d& „  ƒ ZI e d' „  ƒ ZJ e d( „  ƒ ZK e d) „  ƒ ZL e e7 ƒ d* „  ƒ ZM e eN ƒ d+ „  ƒ ZO e e jP ƒ d, „  ƒ ZQ e e j d- ƒ d d. „ ƒ ZS e e jT ƒ d/ „  ƒ ZU e e j d0 ƒ d1 „  ƒ ZV e e j d2 ƒ d d3 „ ƒ ZW e e jX ƒ d4 „  ƒ ZY e e jZ ƒ d5 „  ƒ Z[ e e j d6 ƒ d7 „  ƒ Z\ e e j d8 ƒ d9 „  ƒ Z] e e j d: ƒ d d; „ ƒ Z^ e e j d< ƒ d= „  ƒ Z_ e e j d> ƒ d? „  ƒ Z` e e j d@ ƒ dA „  ƒ Za e e jb ƒ dB „  ƒ Zc e e jd ƒ dC „  ƒ Ze e dD e j ƒ e dD e j ƒ e dD e j ƒ dE „  ƒ ƒ ƒ Zf e dD e j ƒ dF „  ƒ Zg e dG e j ƒ e e jh ƒ dH „  ƒ ƒ Zi dI „  Zj d S(J   s1   
Compiler-side implementation of the dictionary.
iÿÿÿÿN(   t   IntEnum(   t   ir(   t   cgutils(   t
   _helperlib(   t   overloadt   overload_methodt	   intrinsict   register_modelt   modelst   lower_builtin(   t   iternext_impl(   t   types(   t   DictTypet   DictItemsIterableTypet   DictKeysIterableTypet   DictValuesIterableTypet   DictIteratorTypet   Type(   t   impl_ret_borrowedt   RefType(   t   TypingError(   t   typing(   t	   _as_bytest   _castt   _nonoptionalt   _sentry_safe_cast_defaultt   _get_incref_decreft
   _get_equalt   _container_get_datat   DKIXc           B   s   e  Z d  Z d Z RS(   s)   Special return value of dict lookup.
    iÿÿÿÿ(   t   __name__t
   __module__t   __doc__t   EMPTY(    (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyR   :   s   t   Statusc           B   s8   e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 RS(   s+   Status code for other dict operations.
    i    i   iÿÿÿÿiþÿÿÿiýÿÿÿiüÿÿÿiûÿÿÿ(
   R   R   R    t   OKt   OK_REPLACEDt   ERR_NO_MEMORYt   ERR_DICT_MUTATEDt   ERR_ITER_EXHAUSTEDt   ERR_DICT_EMPTYt   ERR_CMP_FAILED(    (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyR"   @   s   c         C   s
   t  ‚ d S(   s¬   Construct a new dict. (Not implemented in the interpreter yet)

    Parameters
    ----------
    key, value : TypeRef
        Key type and value type of the new dict.
    N(   t   NotImplementedError(   t   keyt   value(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   new_dictL   s    t	   DictModelc           B   s   e  Z d  „  Z RS(   c         C   s;   d t  f d t j f g } t t |  ƒ j | | | ƒ d  S(   Nt   meminfot   data(   t   _meminfo_dictptrR   t   voidptrt   superR.   t   __init__(   t   selft   dmmt   fe_typet   members(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyR4   Y   s    	(   R   R   R4   (    (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyR.   W   s   t   DictIterModelc           B   s   e  Z d  „  Z RS(   c         C   s>   d | j  f d t j f g } t t |  ƒ j | | | ƒ d  S(   Nt   parentt   state(   R:   R   R2   R3   R9   R4   (   R5   R6   R7   R8   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyR4   f   s    (   R   R   R4   (    (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyR9   a   s   c         C   sZ   | j  t t j ƒ ƒ } | j | j d | | ƒ ƒ  |  j j | t | f ƒ Wd QXd S(   s?   Raise an internal error depending on the value of *status*
    s   !=N(	   t   typet   intR"   R#   t   if_thent   icmp_signedt	   call_convt   return_user_exct   RuntimeError(   t   contextt   buildert   statust   msgt	   ok_status(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _raise_if_errorn   s    c         C   s@   t  | t j ƒ s! t d ƒ ‚ n  d „  } t | ƒ } | | f S(   s0   Returns the MemInfoPointer of a dictionary.
    s"   expected *dctobj* to be a DictTypec         S   sV   | j  \ } | \ } |  j j | | | ƒ t j | ƒ } | |  | d | ƒ} | j S(   NR,   (   t   argst   nrtt   increfR   t   create_struct_proxyR/   (   RC   RD   t   sigRI   t   tdt   dt   ctort   dstruct(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   codegen}   s    	(   t
   isinstanceR   R   R   R1   (   t	   typingctxt   dctobjRR   RM   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _as_meminfov   s
    	
c            ss   | t  k r t d ƒ ‚ n  | j ‰  t ˆ  t ƒ sK t d j t ƒ ƒ ‚ n  ‡  f d †  } ˆ  | | ƒ } | | f S(   s0   Recreate a dictionary from a MemInfoPointer
    s#   expected a MemInfoPointer for dict.s   expected a {}c            s£   | j  \ } } | j } | \ } } t j | ƒ }	 |	 |  | ƒ }
 |  j j | | ƒ } | j | t j ƒ  ƒ } | j	 | ƒ |
 _
 | |
 _ t |  | ˆ  |
 j ƒ  ƒ S(   N(   RI   t   instance_typeR   RL   RJ   t   meminfo_datat   bitcastt   ll_dict_typet
   as_pointert   loadR0   R/   R   t	   _getvalue(   RC   RD   RM   RI   t   tmit   tdrefRN   t   mit   _RP   RQ   t   data_pointer(   t   dicttype(    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   •   s    		(   R1   R   RW   RS   R   t   format(   RT   R`   t   dicttyperefRR   RM   (    (   Rc   s/   lib/python2.7/site-packages/numba/dictobject.pyt   _from_meminfo‹   s    	c         C   sJ   t  j t  j ƒ  t g ƒ } | j j | d d ƒ} | j | | g ƒ d S(   s   Call numba_dict_free(ptr)
    t   namet   numba_dict_freeN(   R   t   FunctionTypet   VoidTypeRZ   t   modulet   get_or_insert_functiont   call(   RC   RD   t   ptrt   fntyt   free(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _call_dict_free®   s
    	c   
      C   sÖ   |  j  t j ƒ } |  j  t j ƒ } t j t j ƒ  | | | g ƒ } d } | j | d | ƒ} | j rÒ d | _	 t j
 | j ƒ  ƒ } | j | j d t j ƒ  ƒ } | j | ƒ }	 t |  | |	 ƒ | j ƒ  n  | S(   s#   Define the dtor for dictionary
    t   _numba_dict_dtorRg   t   linkonce_odri    (   t   get_value_typeR   R2   t   uintpR   Ri   Rj   Rl   t   is_declarationt   linkaget	   IRBuildert   append_basic_blockRY   RI   RZ   R[   R\   Rq   t   ret_void(
   RC   Rk   t	   llvoidptrt   llsizeRo   t   fnamet   fnRD   t   dpRO   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt	   _imp_dtor¹   s    			c            s4   t  j } | ˆ  ˆ ƒ } ‡  ‡ f d †  } | | f S(   sÊ   Wrap numba_dict_new_minsize.

    Allocate a new dictionary object with the minimum capacity.

    Parameters
    ----------
    keyty, valty: Type
        Type of the key and value, respectively.

    c            sã   t  j t t j ƒ  t t g ƒ } | j j | d d ƒ} |  j ˆ  j	 ƒ } |  j ˆ j	 ƒ } |  j
 | ƒ } |  j
 | ƒ }	 t j | t d t ƒ}
 | j | |
 t | ƒ t |	 ƒ g ƒ } t |  | | d d ƒ| j |
 ƒ } | S(   NRg   t   numba_dict_new_minsizet   zfillRF   s   Failed to allocate dictionary(   R   Ri   t	   ll_statusRZ   R[   t
   ll_ssize_tRk   Rl   t   get_data_typeRW   t   get_abi_sizeofR   t   alloca_oncet   TrueRm   RH   R\   (   RC   RD   RM   RI   Ro   R~   t   ll_keyt   ll_valt   sz_keyt   sz_valt   refdpRE   R   (   t   keytyt   valty(    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   á   s"    (   R   R2   (   RT   RŽ   R   t   restyRM   RR   (    (   RŽ   R   s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_new_minsizeÒ   s    	c            s7   t  j } | | ˆ  ˆ ƒ } ‡  ‡ f d †  } | | f S(   s%   Wrap numba_dict_set_method_table
    c            sM  t  j t t t t t g ƒ } t  j t  j ƒ  t | j ƒ  g ƒ } t  j | j | d d ƒ} | d } t	 j
 | | d t ƒ} t	 j | | d d ƒ }	 t	 j | | d d ƒ }
 t	 j | | d d ƒ } t	 j | | d d ƒ } t	 j | | d d ƒ } |  j ˆ  j } | j ƒ  r²t |  | j | d	 ƒ } t |  | j | d	 ƒ \ } } | j | j | |	 j j ƒ |	 ƒ | j | j | |
 j j ƒ |
 ƒ | j | j | | j j ƒ | ƒ n  |  j ˆ j } | j ƒ  r3t |  | j | d	 ƒ \ } } | j | j | | j j ƒ | ƒ | j | j | | j j ƒ | ƒ n  | j | | | g ƒ d  S(
   NRg   t   numba_dict_set_method_tablei    R‚   i   i   i   i   t   dict(   R   t   LiteralStructTypet   ll_voidptr_typeRi   Rj   RZ   R[   t   FunctionRk   R   R‡   Rˆ   t   gep_inboundst   data_model_managerRW   t   contains_nrt_meminfoR   R   t   storeRY   R<   t   pointeeRm   (   RC   RD   RM   RI   t   vtabletyt   setmethod_fntyt   setmethod_fnR   t   vtablet   key_equal_ptrt   key_incref_ptrt   key_decref_ptrt   val_incref_ptrt   val_decref_ptrt   dm_keyt   equalt
   key_increft
   key_decreft   dm_valt
   val_increft
   val_decref(   RŽ   R   (    s/   lib/python2.7/site-packages/numba/dictobject.pyRR     sZ    		


(   R   t   void(   RT   R   RŽ   R   R   RM   RR   (    (   RŽ   R   s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_set_method_tableû   s    	>c         C   s:   t  j } | | | j t  j | j ƒ } d „  } | | f S(   s   Wrap numba_dict_insert
    c      	   S   s,  t  j t t t t t t g ƒ } | \ } } } } | j \ }	 }
 } } | j j | d d ƒ} |  j	 |
 } |  j	 | } | j
 | | ƒ } | j
 | | ƒ } t j | | ƒ } t j | | ƒ } t j | | j ƒ } t |  | |	 | ƒ } | j | | t | | ƒ | t | | ƒ t | | ƒ g ƒ } | S(   NRg   t   numba_dict_insert(   R   Ri   Rƒ   RZ   t   ll_bytest   ll_hashRI   Rk   Rl   R˜   t   as_dataR   t   alloca_once_valueR‡   R<   R   Rm   R   (   RC   RD   RM   RI   Ro   RO   R+   t   hashvalt   valRN   t   tkeyt   thashvalt   tvalR~   R¥   R©   t   data_keyt   data_valt   ptr_keyt   ptr_valt
   ptr_oldvalR   RE   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   J  s,    (   R   t   int32t   key_typet   intpt
   value_type(   RT   RO   R+   R³   R´   R   RM   RR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_insertC  s    		!c         C   s(   t  j } | | ƒ } d „  } | | f S(   sF   Wrap numba_dict_length

    Returns the length of the dictionary.
    c   
      S   sp   t  j t t g ƒ } | j j | d d ƒ} | \ } | j \ } t |  | | | ƒ } | j | | g ƒ }	 |	 S(   NRg   t   numba_dict_length(	   R   Ri   R„   RZ   Rk   Rl   RI   R   Rm   (
   RC   RD   RM   RI   Ro   R~   RO   RN   R   t   n(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   w  s    	(   R   R¿   (   RT   RO   R   RM   RR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_lengthn  s    		c         C   s(   t  j } | | ƒ } d „  } | | f S(   sR   Dump the dictionary keys and values.
    Wraps numba_dict_dump for debugging.
    c   	      S   st   t  j t  j ƒ  t g ƒ } | j \ } | \ } t |  | | | ƒ } | j j | d d ƒ} | j | | g ƒ d  S(   NRg   t   numba_dict_dump(	   R   Ri   Rj   RZ   RI   R   Rk   Rl   Rm   (	   RC   RD   RM   RI   Ro   RN   RO   R   R~   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   Ž  s    		(   R   R¬   (   RT   RO   R   RM   RR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt
   _dict_dump†  s    		c            sO   t  j t  j t  j | j ƒ g ƒ ‰  ˆ  | | | ƒ } ‡  f d †  } | | f S(   sG   Wrap numba_dict_lookup

    Returns 2-tuple of (intp, ?value_type)
    c            sà  t  j t t t t t g ƒ } | j \ } } } | \ } }	 }
 | j j | d d ƒ} |  j	 | } |  j	 | j
 } | j | |	 ƒ } t j | | ƒ } |  j | j
 ƒ } t j | | ƒ } t |  | | | ƒ } | j | | t | | ƒ |
 t | | ƒ g ƒ } | j d | | j t t j ƒ ƒ ƒ } |  j | | j
 ƒ } t j | | ƒ } | j | ƒ X | j | | ƒ } |  j j | | j
 | ƒ |  j | | j
 | ƒ } | j | | ƒ Wd  QX| j | ƒ } |  j  | ˆ  | | g ƒ S(   NRg   t   numba_dict_lookupt   >(!   R   Ri   R„   RZ   R¯   R°   RI   Rk   Rl   R˜   RÀ   R±   R   R²   R…   R‡   R   Rm   R   R?   R<   R=   R   R!   t   make_optional_noneR>   t   load_from_data_pointerRJ   RK   t   make_optional_valueRš   R\   t
   make_tuple(   RC   RD   RM   RI   Ro   RN   Rµ   R¶   RO   R+   R³   R~   R¥   R©   R¸   Rº   RŠ   R»   R   t   ixt   foundt   outt   poutR´   t   loaded(   R   (    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   ¦  s:    '(   R   t   TupleR¿   t   OptionalRÀ   (   RT   RO   R+   R³   RM   RR   (    (   R   s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_lookup  s    $+c            sa   t  j | j | j g ƒ ‰  t  j t  j t  j ˆ  ƒ g ƒ } | | ƒ } ‡  f d †  } | | f S(   s   Wrap numba_dict_popitem
    c      	      sÄ  t  j t t t t g ƒ } | \ } | j \ } | j j | d d ƒ} |  j | j	 } |  j | j
 }	 t j | | j ƒ  ƒ }
 t j | |	 j ƒ  ƒ } t |  | | | ƒ } | j | | t | |
 ƒ t | | ƒ g ƒ } |  j | ˆ  ƒ } t j | | ƒ } | j d | | j t t j ƒ ƒ ƒ } | j | ƒ i | j | |
 ƒ } |	 j | | ƒ } |  j | ˆ  | | g ƒ } |  j | ˆ  | ƒ } | j | | ƒ Wd  QX| j | ƒ } t j | | | g ƒ S(   NRg   t   numba_dict_popitems   ==(   R   Ri   Rƒ   RZ   R¯   RI   Rk   Rl   R˜   R¾   RÀ   R   R‡   R…   R   Rm   R   RÉ   R²   R?   R<   R=   R"   R#   R>   RÊ   RÌ   RË   Rš   R\   t   pack_struct(   RC   RD   RM   RI   Ro   RO   RN   R~   R¥   R©   Rº   R»   R   RE   RÏ   RÐ   t   condR+   R´   t   keyvalt	   optkeyval(   t   keyvalty(    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   Ý  s6    	'(   R   RÒ   R¾   RÀ   R½   RÓ   (   RT   RO   R   RM   RR   (    (   RÚ   s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_popitemÔ  s
    !&c         C   s1   t  j } | | | t  j ƒ } d „  } | | f S(   s   Wrap numba_dict_delitem
    c         S   sˆ   t  j t t t t g ƒ } | \ } } } | j \ } }	 }
 | j j | d d ƒ} t	 |  | | | ƒ } | j
 | | | | g ƒ } | S(   NRg   t   numba_dict_delitem(   R   Ri   Rƒ   RZ   R°   R„   RI   Rk   Rl   R   Rm   (   RC   RD   RM   RI   Ro   RO   t   hkRÍ   RN   t   thkt   tixR~   R   RE   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRR     s    (   R   R½   R¿   (   RT   RO   RÝ   RÍ   R   RM   RR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_delitem  s    		c            s   ‡  f d †  } | S(   s`   The common codegen for iterator intrinsics.

    Populates the iterator struct and increfs.
    c            s^   | \ } | j  \ } |  j | ˆ  ƒ } | | _ | j j d  ƒ | _ t |  | ˆ  | j ƒ  ƒ S(   N(   RI   t   make_helperR:   R;   R<   t   NoneR   R]   (   RC   RD   RM   RI   RO   RN   t
   iterhelper(   R   (    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   $  s    		(    (   R   RR   (    (   R   s/   lib/python2.7/site-packages/numba/dictobject.pyt   _iterator_codegen  s    c         C   s1   t  j | ƒ } | | ƒ } t | ƒ } | | f S(   s$   Get dictionary iterator for .items()(   R   R   Rä   (   RT   RO   R   RM   RR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_items4  s    c         C   s1   t  j | ƒ } | | ƒ } t | ƒ } | | f S(   s#   Get dictionary iterator for .keys()(   R   R   Rä   (   RT   RO   R   RM   RR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt
   _dict_keys=  s    c         C   s1   t  j | ƒ } | | ƒ } t | ƒ } | | f S(   s%   Get dictionary iterator for .values()(   R   R   Rä   (   RT   RO   R   RM   RR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   _dict_valuesF  s    c            sC   t  j | j | j ƒ ‰  ‡  f d †  } ˆ  | | | ƒ } | | f S(   sß   Make a dictionary struct with the given *ptr*

    Parameters
    ----------
    keyty, valty: Type
        Type of the key and value, respectively.
    ptr : llvm pointer value
        Points to the dictionary object.
    c            sÚ   | \ } } } t  j ˆ  ƒ } | |  | ƒ } | | _ |  j |  j t j ƒ ƒ } t |  | j ƒ }	 |  j	 j
 | |  j t j | ƒ |	 ƒ }
 |  j	 j | |
 ƒ } | j | t j ƒ  ƒ } | j | | ƒ |
 | _ | j ƒ  S(   N(   R   RL   R0   R†   Rt   R   R2   R€   Rk   RJ   t   meminfo_alloc_dtort   get_constantRu   RX   RY   RZ   R[   Rš   R/   R]   (   RC   RD   t	   signatureRI   Ra   Rn   RP   RQ   t
   alloc_sizet   dtorR/   Rb   (   t   dict_ty(    s/   lib/python2.7/site-packages/numba/dictobject.pyRR   \  s     				(   R   R   RW   (   RT   RŽ   R   Rn   RR   RM   (    (   Rí   s/   lib/python2.7/site-packages/numba/dictobject.pyt
   _make_dictO  s    c            sX   t  t |  t ƒ t | t ƒ g ƒ r5 t d ƒ ‚ n  |  | ‰  ‰ ‡  ‡ f d †  } | S(   ss   Creates a new dictionary with *key* and *value* as the type
    of the dictionary key and value, respectively.
    s.   expecting *key* and *value* to be a numba Typec            s5   t  ˆ  ˆ ƒ } t | ˆ  ˆ ƒ t ˆ  ˆ | ƒ } | S(   N(   R‘   R­   Rî   (   R+   R,   R   RO   (   RŽ   R   (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   imp…  s    (   t   anyRS   R   t	   TypeError(   R+   R,   Rï   (    (   RŽ   R   s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_new_dictx  s    c         C   s#   t  |  t j ƒ s d Sd „  } | S(   s   len(dict)
    Nc         S   s
   t  |  ƒ S(   N(   RÄ   (   RO   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl•  s    (   RS   R   R   (   RO   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_lenŽ  s    	c            s™   t  |  t j ƒ s d  S|  j |  j ‰  ‰ ‡  ‡ f d †  } |  j ƒ  rK | S|  j | | ƒ }  |  j |  j ‰  ‰ t j t j	 |  ˆ  ˆ ƒ } | | f Sd  S(   Nc            s   t  | ˆ  ƒ } t  | ˆ ƒ } t |  | t | ƒ | ƒ } | t j k rL d  S| t j k r_ d  S| t j k r} t d ƒ ‚ n t d ƒ ‚ d  S(   Ns   key comparison faileds$   dict.__setitem__ failed unexpectedly(	   R   RÁ   t   hashR"   R#   R$   R)   t
   ValueErrorRB   (   RO   R+   R,   t	   castedkeyt	   castedvalRE   (   RŽ   R   (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   ¢  s    (
   RS   R   R   R¾   RÀ   t
   is_preciset   refineR   Rê   R¬   (   RO   R+   R,   Ró   RM   (    (   RŽ   R   s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_setitem›  s    t   getc            sK   t  |  t j ƒ s d  S|  j ‰  |  j } t | | ƒ d  ‡  f d † } | S(   Nc            sD   t  | ˆ  ƒ } t |  | t | ƒ ƒ \ } } | t j k r@ | S| S(   N(   R   RÔ   Rõ   R   R!   (   t   dctR+   t   defaultR÷   RÍ   R´   (   RŽ   (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   Æ  s
    (   RS   R   R   R¾   RÀ   R   Râ   (   Rý   R+   Rþ   R   Ró   (    (   RŽ   s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_get¾  s    		c            s2   t  |  t j ƒ s d  S|  j ‰  ‡  f d †  } | S(   Nc            st   t  | ˆ  ƒ } t |  | t | ƒ ƒ \ } } | t j k rH t ƒ  ‚ n( | t j k  rf t d ƒ ‚ n
 t | ƒ Sd  S(   Ns!   internal dict error during lookup(   R   RÔ   Rõ   R   R!   t   KeyErrort   AssertionErrorR   (   RO   R+   R÷   RÍ   R´   (   RŽ   (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   ×  s    (   RS   R   R   R¾   (   RO   R+   Ró   (    (   RŽ   s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_getitemÐ  s
    	
t   popitemc         C   s#   t  |  t j ƒ s d  Sd „  } | S(   Nc         S   sV   t  |  ƒ \ } } | t j k r+ t | ƒ S| t j k rF t ƒ  ‚ n t d ƒ ‚ d  S(   Ns"   internal dict error during popitem(   RÛ   R"   R#   R   R(   R   R  (   RO   RE   RØ   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   é  s    
(   RS   R   R   (   RO   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_popitemä  s    		t   popc            s`   t  |  t j ƒ s d  S|  j ‰  |  j } t  | t j ƒ ‰ t | | ƒ d  ‡  ‡ f d † } | S(   Nc            s±   t  | ˆ  ƒ } t | ƒ } t |  | | ƒ \ } } | t j k r[ ˆ rT t ƒ  ‚ q­ | SnR | t j k  ry t d ƒ ‚ n4 t |  | | ƒ } | t j	 k r© t d ƒ ‚ n  | Sd  S(   Ns!   internal dict error during lookups"   internal dict error during delitem(
   R   Rõ   RÔ   R   R!   R   R  Rà   R"   R#   (   Rý   R+   Rþ   R÷   t   hashedRÍ   R´   RE   (   RŽ   t   should_raise(    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   ÿ  s    (   RS   R   R   R¾   RÀ   t   OmittedR   Râ   (   Rý   R+   Rþ   R   Ró   (    (   RŽ   R  s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_popõ  s    		c         C   s#   t  |  t j ƒ s d  Sd „  } | S(   Nc         S   s   |  j  | ƒ d  S(   N(   R  (   RO   t   k(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó     s    (   RS   R   R   (   RO   R
  Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_delitem  s    	c            s2   t  |  t j ƒ s d  S|  j ‰  ‡  f d †  } | S(   Nc            s:   t  | ˆ  ƒ } t |  | t | ƒ ƒ \ } } | t j k S(   N(   R   RÔ   Rõ   R   R!   (   RO   R
  RÍ   R´   (   RŽ   (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   $  s    (   RS   R   R   R¾   (   RO   R
  Ró   (    (   RŽ   s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_contains  s
    	t   clearc         C   s#   t  |  t j ƒ s d  Sd „  } | S(   Nc         S   s!   x t  |  ƒ r |  j ƒ  q Wd  S(   N(   t   lenR  (   RO   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   0  s    (   RS   R   R   (   RO   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt
   impl_clear+  s    	t   copyc            s?   t  |  t j ƒ s d  S|  j |  j ‰  ‰ ‡  ‡ f d †  } | S(   Nc            s:   t  ˆ  ˆ ƒ } x$ |  j ƒ  D] \ } } | | | <q W| S(   N(   R-   t   items(   RO   t   newdR
  t   v(   R¾   t   val_type(    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   >  s    (   RS   R   R   R¾   RÀ   (   RO   Ró   (    (   R¾   R  s/   lib/python2.7/site-packages/numba/dictobject.pyt	   impl_copy7  s
    t
   setdefaultc         C   s&   t  |  t j ƒ s d  Sd  d „ } | S(   Nc         S   s!   | |  k r | |  | <n  |  | S(   N(    (   Rý   R+   Rþ   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   L  s    (   RS   R   R   Râ   (   Rý   R+   Rþ   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_setdefaultG  s    R  c         C   s#   t  |  t j ƒ s d  Sd „  } | S(   Nc         S   s   t  |  ƒ } | S(   N(   Rå   (   RO   t   it(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   Y  s    (   RS   R   R   (   RO   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt
   impl_itemsT  s    	t   keysc         C   s#   t  |  t j ƒ s d  Sd „  } | S(   Nc         S   s
   t  |  ƒ S(   N(   Ræ   (   RO   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   e  s    (   RS   R   R   (   RO   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt	   impl_keys`  s    	t   valuesc         C   s#   t  |  t j ƒ s d  Sd „  } | S(   Nc         S   s
   t  |  ƒ S(   N(   Rç   (   RO   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   p  s    (   RS   R   R   (   RO   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_valuesk  s    	c            sQ   t  |  t j ƒ s d  St  | t j ƒ s5 d „  } | S| j ‰  ‡  f d †  } | S(   Nc         S   s   t  S(   N(   t   False(   t   dat   db(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_type_mismatch|  s    c            s   t  |  ƒ t  | ƒ k r t Sxj |  j ƒ  D]\ \ } } t | ˆ  ƒ } t | | t | ƒ ƒ \ } } | t j k ru t S| | k r) t Sq) Wt S(   N(	   R  R  R  R   RÔ   Rõ   R   R!   Rˆ   (   R  R   t   kat   vat   kbRÍ   t   vb(   t
   otherkeyty(    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_type_matched‚  s    (   RS   R   R   R¾   (   R  R   R!  R'  (    (   R&  s/   lib/python2.7/site-packages/numba/dictobject.pyt
   impl_equalv  s    		c         C   s#   t  |  t j ƒ s d  Sd „  } | S(   Nc         S   s   |  | k S(   N(    (   R  R   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyRó   ™  s    (   RS   R   R   (   R  R   Ró   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_not_equal”  s    	t   getiterc         C   s  | j  d } |  j | | j | d ƒ } t j t j ƒ  t t g ƒ } | j j	 | d d ƒ} t
 j t
 j ƒ } | t j d ƒ }	 t j t j d ƒ |	 ƒ  ƒ }
 t j | |
 d t ƒ} t | | ƒ | _ t |  | | j | j ƒ } | j | | j | g ƒ t |  | | j | j ƒ  ƒ S(   s6   Implement iter() for .keys(), .values(), .items()
    i    Rg   t   numba_dict_itert   dict_iter_sizeofi   R‚   (   RI   Rá   t   iterator_typeR   Ri   Rj   t   ll_dictiter_typeRZ   Rk   Rl   t   ctypest	   CFUNCTYPEt   c_size_tR   t	   c_helperst	   ArrayTypet   IntTypeR   R‡   Rˆ   R   R;   R   R:   Rm   R   t   return_typeR]   (   RC   RD   RM   RI   t
   iterabletyR  Ro   R~   t   protot   dictiter_sizeoft
   state_typet   pstateR   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_iterable_getiterŸ  s$    	c         C   s6  | j  \ } | \ } t j | ƒ } |  j | | j ƒ } t j t j ƒ  t t	 g ƒ } | j
 j | d d ƒ}	 t j t j ƒ }
 |
 t j d ƒ } t j t j d ƒ | ƒ  ƒ } t j | | d t ƒ} t | | ƒ | _ | | _ t |  | | j | d ƒ } | j |	 | j | g ƒ t |  | | j | j ƒ  ƒ S(   sB   Implement iter(Dict).  Semantically equivalent to dict.keys()
    Rg   R+  R,  i   R‚   i    (   RI   R   R   Rá   R-  R   Ri   Rj   R.  RZ   Rk   Rl   R/  R0  R1  R   R2  R3  R4  R   R‡   Rˆ   R   R;   R:   R   Rm   R   R5  R]   (   RC   RD   RM   RI   RN   RO   R6  R  Ro   R~   R7  R8  R9  R:  R   (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_dict_getiterÀ  s*    			t   iternextc      	   C   s,  | j  d } |  j | | | d ƒ } t j ƒ  } t j t t | | g ƒ } | j j | d d ƒ}	 t	 j
 | t ƒ }
 t	 j
 | t ƒ } | j |	 | j |
 | f ƒ } | j d | | j d ƒ ƒ } | j | ƒ | j | ƒ E| j } | j j \ } } |  j | } |  j | } | j | j |
 ƒ | j ƒ  j ƒ  ƒ } | j | j | ƒ | j ƒ  j ƒ  ƒ } | j | | ƒ } | j | | ƒ } t | j t ƒ rÆ|  j | | | | g ƒ } | j | ƒ n\ t | j t ƒ rè| j | ƒ n: t | j t ƒ r
| j | ƒ n t  d j! | j ƒ ƒ ‚ Wd  QXd  S(   Ni    Rg   t   numba_dict_iter_nexts   ==s   unknown type: {}("   RI   Rá   R¯   R[   R   Ri   Rƒ   Rk   Rl   R   R‡   Rm   R;   t   icmp_unsignedR<   t	   set_validR>   t
   yield_typeR:   t   keyvalue_typeR˜   RY   R\   R…   RÊ   RS   t   iterableR   RÌ   t   yield_R   R   R  Rd   (   RC   RD   RM   RI   t   resultt	   iter_typeR  t	   p2p_bytest   iternext_fntyR=  t   key_raw_ptrt   val_raw_ptrRE   t   is_validRA  t   key_tyt   val_tyR¥   R©   t   key_ptrt   val_ptrR+   R´   t   tup(    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   impl_iterator_iternextâ  sF    			c            sá   d d l  m ‰  t j | ƒ } | j | j ‰ ‰ ‡  ‡ ‡ f d †  } |  j | | | d ƒ } | rÝ xu t | | ƒ D]a \ \ ‰ ‰ \ } }	 t j t j	 | ˆ ˆ ƒ } | | |	 f }
 d „  } |  j | | | |
 ƒ qu Wn  | S(   Niÿÿÿÿ(   t   Dictc              s   ˆ  j  ˆ ˆ ƒ S(   N(   t   empty(    (   RR  t   ktt   vt(    s/   lib/python2.7/site-packages/numba/dictobject.pyt	   make_dict%  s    c         S   s   | |  | <d  S(   N(    (   RO   R
  R  (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   put/  s    (    (
   t   numba.typedRR  R   Rê   R¾   RÀ   t   compile_internalt   zipR   R¬   (   RC   RD   t	   dict_typet
   item_typesR  RM   RV  RO   R
  R  RI   RW  (    (   RR  RT  RU  s/   lib/python2.7/site-packages/numba/dictobject.pyt	   build_map  s    (	(k   R    R/  t   operatort   enumR    t   llvmliteR   t   numbaR   R   t   numba.extendingR   R   R   R   R   R	   t   numba.targets.imputilsR
   R   t   numba.typesR   R   R   R   R   R   R   R   t   numba.errorsR   R   t   numba.typedobjectutilsR   R   R   R   R   R   R   t	   voidptr_tRZ   R.  R•   t   int32_tRƒ   t   intp_tR„   R°   R¯   t   MemInfoPointerR2   R1   R   R"   R-   t   StructModelR.   R9   RH   RV   Rf   Rq   R€   R‘   R­   RÁ   RÄ   RÆ   RÔ   RÛ   Rà   Rä   Rå   Ræ   Rç   Rî   Rò   R  Rô   t   setitemRû   Râ   Rÿ   t   getitemR  R  R	  t   delitemR  t   containsR  R  R  R  R  R  R  t   eqR(  t   neR)  R;  R<  t   BORROWEDRQ  R]  (    (    (    s/   lib/python2.7/site-packages/numba/dictobject.pyt   <module>   sš   ..4
											"		#		)H+72				)#
!"<