ó
\K]c           @` sÈ   d  Z  d d l m Z m Z m 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 Z e r| d	 n d
 Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   s2   
Testing C implementation of the numba dictionary
i    (   t   print_functiont   absolute_importt   divisionNi   (   t   TestCase(   t
   _helperlib(   t	   IS_32BITSiÿÿÿÿi   i   t   Dictc           B` s§   e  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(   sW   A wrapper around the C-API to provide a minimal dictionary object for
    testing.
    c         C` s4   | |  _  | |  _ | |  _ |  j | | ƒ |  _ d S(   sÀ   
        Parameters
        ----------
        tc : TestCase instance
        keysize : int
            byte size for the key
        valsize : int
            byte size for the value
        N(   t   tct   keysizet   valsizet   dict_new_minsizet   dp(   t   selfR   R   R	   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __init__   s    
			c         C` s   |  j  j |  j ƒ d  S(   N(   R   t   numba_dict_freeR   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __del__'   s    c         C` s
   |  j  ƒ  S(   N(   t   dict_length(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __len__*   s    c         C` sp   t  | j ƒ  ƒ } t  | j ƒ  ƒ } |  j j t | ƒ |  j ƒ |  j j t | ƒ |  j ƒ |  j | | ƒ d  S(   N(   t   bytest   encodeR   t   assertEqualt   lenR   R	   t   dict_insert(   R   t   kt   vt   bkt   bv(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __setitem__-   s
    c         C` sf   t  | j ƒ  ƒ } |  j j t | ƒ |  j ƒ |  j | ƒ \ } } | t k rX t ‚ n
 | j	 ƒ  Sd  S(   N(
   R   R   R   R   R   R   t   dict_lookupt
   DKIX_EMPTYt   KeyErrort   decode(   R   R   R   t   ixt   old(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __getitem__4   s    	c         C` sP   t  | j ƒ  ƒ } |  j j t | ƒ |  j ƒ |  j | ƒ sL t | ƒ ‚ n  d  S(   N(   R   R   R   R   R   R   t   dict_delitemR   (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __delitem__=   s    c         C` s%   y |  | SWn t  k
 r  d  SXd  S(   N(   R   (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   getC   s    c         C` s
   t  |  ƒ S(   N(   t   DictIter(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   itemsI   s    c         C` s(   |  j  ƒ  \ } } | j ƒ  | j ƒ  f S(   N(   t   dict_popitemR   (   R   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   popitemL   s    c         C` sD   t  j ƒ  } |  j j t  j | ƒ | | ƒ } |  j j | d ƒ | S(   Ni    (   t   ctypest   c_void_pR   t   numba_dict_new_minsizet   byrefR   (   R   t   key_sizet   val_sizeR   t   status(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR
   T   s
    	c         C` s   |  j  j |  j ƒ S(   N(   R   t   numba_dict_lengthR   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR   \   s    c         C` sA   t  | ƒ } |  j j |  j | | | ƒ } |  j j | d ƒ d  S(   Ni    (   t   hashR   t   numba_dict_insert_ezR   t   assertGreaterEqual(   R   t	   key_bytest	   val_bytest   hashvalR0   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR   _   s    	c         C` s\   t  | ƒ } t j |  j ƒ } |  j j |  j | | | ƒ } |  j j | t ƒ | | j	 f S(   N(
   R2   R*   t   create_string_bufferR	   R   t   numba_dict_lookupR   R4   R   t   value(   R   R5   R7   t   oldval_bytesR    (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR   f   s    	c         C` sc   |  j  | ƒ \ } } | t k r% t St | ƒ } |  j j |  j | | ƒ } |  j j | d ƒ t S(   Ni    (	   R   R   t   FalseR2   R   t   numba_dict_delitemR   R   t   True(   R   R5   R    t   oldvalR7   R0   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR#   o   s    c         C` s‰   t  j |  j ƒ } t  j |  j ƒ } |  j j |  j | | ƒ } | d k ry | d k rf t d ƒ ‚ qy |  j j d ƒ n  | j	 | j	 f S(   Ni    iüÿÿÿs   popitem(): dictionary is emptyt   Unknown(
   R*   R8   R   R	   R   t   numba_dict_popitemR   R   t   _failR:   (   R   R5   R6   R0   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR(   x   s    c         C` s   |  j  j | |  j ƒ d  S(   N(   R   t   numba_dict_iterR   (   R   t   itptr(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt	   dict_iterƒ   s    c         C` s  t  j d ƒ } t  j d ƒ } |  j j | t  j | ƒ t  j | ƒ ƒ } | d k rc t d ƒ ‚ n« | d k rs d  S|  j j | d ƒ |  j j | j t	 d d d ƒ|  j j | j t	 d d d ƒt  j
 |  j j | j ƒ } t  j
 |  j j | j ƒ } | j | j f Sd  S(   Ni    iþÿÿÿs   dictionary mutatediýÿÿÿt   msgs   key not aligneds   val not aligned(   R*   R+   R   t   numba_dict_iter_nextR-   t
   ValueErrorR4   R   R:   t   ALIGNt   c_charR   t   from_addressR	   (   R   RD   R   R   R0   t   keyt   val(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   dict_iter_next†   s    	!  (   t   __name__t
   __module__t   __doc__R   R   R   R   R"   R$   R%   R'   R)   R
   R   R   R   R#   R(   RE   RN   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR      s$   																			R&   c           B` s/   e  Z d  Z d „  Z d „  Z d „  Z e Z RS(   s   A iterator for the `Dict.items()`.

    Only the `.items()` is needed.  `.keys` and `.values` can be trivially
    implemented on the `.items` iterator.
    c         C` sc   | |  _  |  j  j j ƒ  } t j | d ƒ |  _ t j |  j t j ƒ |  _ |  j  j	 |  j ƒ d  S(   Ni    (
   t   parentR   t   numba_dict_iter_sizeofR*   t   c_char_pt   it_state_buft   castR+   t   itRE   (   R   RR   t   itsize(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR   ¤   s
    	c         C` s   |  S(   N(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __iter__«   s    c         C` sP   |  j  j |  j ƒ } | d  k r* t ‚ n" | \ } } | j ƒ  | j ƒ  f Sd  S(   N(   RR   RN   RW   t   Nonet   StopIterationR   (   R   t   outR   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   __next__®   s
    	(   RO   RP   RQ   R   RY   R]   t   next(    (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR&   ž   s
   			t   TestDictImplc           B` s€   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d „  Z d „  Z RS(   c         C` s«  t  j } t  j } t  j } d d „ } | d t  j ƒ |  _ | d t  j t  j | ƒ t  j t  j g ƒ |  _ | d d | g ƒ |  _ | d t  j | g ƒ |  _	 | d t  j | t  j
 | t  j
 g ƒ |  _ | d t  j | t  j
 | t  j
 g ƒ |  _ | d t  j | | t  j g ƒ |  _ | d	 t  j | t  j
 t  j
 g ƒ |  _ | d
 t  j ƒ |  _ | d d | | g ƒ |  _ | d t  j | t  j t  j ƒ t  j t  j ƒ g ƒ |  _ d S(   sE   Bind to the c_helper library and provide the ctypes wrapper.
        c         S` s#   t  j | | Œ } | t j |  ƒ S(   N(   R*   t	   CFUNCTYPER   t	   c_helpers(   t   namet   restypet   argtypest   proto(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   wrapÁ   s    t	   test_dictR
   t	   dict_freeR   t   dict_insert_ezR   R#   R(   t   dict_iter_sizeofRE   RN   N(    (   R*   R+   t	   c_ssize_tt   c_intt   numba_test_dictt   POINTERR,   RZ   R   R1   RT   R3   R9   R=   RA   t   c_size_tRS   RC   RG   (   R   t   dict_tt   iter_tt   hash_tRf   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   setUpº   sz    				c         C` s    |  j  ƒ  } |  j | d ƒ d  S(   Ni    (   Rm   R   (   R   t   ret(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_simple_c_test@  s    c         C` sd  t  |  d d ƒ } |  j t | ƒ d ƒ |  j | j d ƒ ƒ d | d <|  j t | ƒ d ƒ |  j | j d ƒ ƒ |  j | d d ƒ d | d <|  j t | ƒ d ƒ |  j | d d ƒ d | d	 <|  j t | ƒ d
 ƒ |  j | d d ƒ |  j | d	 d ƒ d | d <|  j t | ƒ d ƒ |  j | d d ƒ |  j | d	 d ƒ |  j | d d ƒ d  S(   Ni   i   i    t   abcdt   beefcafei   t   cafe0000t   cafe0001t   abcei   t   cafe0002t   abcfi   (   R   R   R   t   assertIsNoneR%   t   assertIsNotNone(   R   t   d(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_insertion_smallE  s&    



c         C` s¦   t  |  d d ƒ } d „  } d „  } xD t | ƒ D]6 } | | ƒ | | | ƒ <|  j t | ƒ | d ƒ q1 Wx4 t | ƒ D]& } |  j | | | ƒ | | ƒ ƒ qx Wd  S(   Ni   c         S` s   d j  |  ƒ S(   Ns	   key_{:04}(   t   format(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   make_keyg  s    c         S` s   d j  |  ƒ S(   Ns	   val_{:04}(   R   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   make_valj  s    i   (   R   t   rangeR   R   (   R   t   nmaxR   R‚   Rƒ   t   i(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   check_insertion_manyc  s    		c         C` sÄ   |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d	 ƒ |  j  d d
 ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ d  S(   NR…   i   i   i	   i   i    i!   iÿ  i   i  iÿ  i   i  (   R‡   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_insertion_manyv  s    c         C` sü  t  |  d d ƒ } |  j t | ƒ d ƒ |  j | j d ƒ ƒ d | d <d | d <d | d	 <|  j t | ƒ d
 ƒ |  j | d d ƒ |  j | d d ƒ |  j | d	 d ƒ |  j t | ƒ d
 ƒ | d =|  j | j d ƒ ƒ |  j | d d ƒ |  j | d	 d ƒ |  j t | ƒ d ƒ |  j t ƒ  | d =Wd  QX| d	 =|  j | j d ƒ ƒ |  j | d d ƒ |  j | j d	 ƒ ƒ |  j t | ƒ d ƒ | d =|  j | j d ƒ ƒ |  j | j d ƒ ƒ |  j | j d	 ƒ ƒ |  j t | ƒ d ƒ d  S(   Ni   i   i    Rv   Rx   Ry   Rz   R{   R|   i   i   i   (   R   R   R   R}   R%   t   assertRaisesR   (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_deletion_small‰  s8    


i    c         C` s4  t  j | ƒ t |  d d ƒ } i  } d „  } d „  } x* t | ƒ D] }	 | |	 ƒ | | |	 ƒ <qD WxJ t | ƒ D]< }	 | |	 ƒ }
 | |	 ƒ } | | |
 <|  j | |
 | ƒ qq W|  j t | ƒ | ƒ t  j t | ƒ | ƒ } | j ƒ  } xH t	 | d d ƒD]4 \ }	 }
 | |
 =| |
 =|  j t | ƒ | |	 ƒ qþ W|  j t | ƒ | | ƒ x$ | D] }
 |  j
 | j |
 ƒ ƒ qWWx& | D] }
 |  j | |
 | |
 ƒ q~WxH t | ƒ D]: }	 | | |	 ƒ }
 | | |	 ƒ } | | |
 <| | |
 <q­W|  j t | ƒ t | ƒ ƒ x& | D] }
 |  j | |
 | |
 ƒ qWd  S(   Ni   c         S` s   d j  |  ƒ S(   Ns   k_{:06x}(   R   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR‚   ¹  s    c         S` s   d j  |  ƒ S(   Ns   v_{:06x}(   R   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyRƒ   ¼  s    t   starti   (   t   randomt   seedR   R„   R   R   t   samplet   listt   copyt	   enumerateR}   R%   (   R   R…   t   ndropt   nrefillR   R   t   keysR‚   Rƒ   R†   R   R   t   droplistt   remain(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   check_delete_randomly²  s@    		

c         C` sÈ   |  j  d d d d d d ƒ |  j  d d d d d d ƒ |  j  d d	 d d
 d d ƒ |  j  d d	 d d d d	 ƒ |  j  d d	 d d	 d d	 ƒ |  j  d d d d d d ƒ |  j  d d d d d d ƒ d  S(   NR…   i   R’   i   R“   i   i
   i   id   i2   iÈ   ic   i   iç  i   i   (   R—   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_delete_randomlyé  s    c         C` s    |  j  d d d d	 d d
 ƒ d  S(   NR…   i   i   R’   i   R“   i
   i   i   i   (   R—   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_delete_randomly_largeó  s    c   
      C` s©  d } t  |  d d ƒ } d „  } d „  } x* t | ƒ D] } | | ƒ | | | ƒ <q7 W|  j t | ƒ | ƒ | j ƒ  \ } } |  j t | ƒ | d ƒ |  j | | t | ƒ ƒ ƒ |  j | | t | ƒ ƒ ƒ x€ t | ƒ rSt | ƒ } | j ƒ  \ } } |  j t | ƒ | d ƒ |  j | | t | ƒ ƒ ƒ |  j | | t | ƒ ƒ ƒ qÔ W|  j t | ƒ d ƒ |  j t ƒ  }	 | j ƒ  Wd  QX|  j d t |	 j	 ƒ ƒ d  S(   Ni
   i   c         S` s   d j  |  ƒ S(   Ns   k_{:06x}(   R   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR‚   þ  s    c         S` s   d j  |  ƒ S(   Ns   v_{:06x}(   R   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyRƒ     s    i   i    s   popitem(): dictionary is empty(
   R   R„   R   R   R)   R‰   R   t   assertInt   strt	   exception(
   R   R…   R   R‚   Rƒ   R†   R   R   t   nt   raises(    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_popitemú  s.    		 c         ` s¶   t  |  d d ƒ } d ‰  d „  } ‡  f d †  } x* t ˆ  ƒ D] } | | ƒ | | | ƒ <q= WxR t | j ƒ  ƒ D]> \ } \ } } |  j | | ƒ | ƒ |  j | | ƒ | ƒ qp Wd  S(   Ni   iè  c         S` s   d j  |  ƒ S(   Ns   {:04}(   R   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR‚   !  s    c         ` s   d j  |  ˆ  ƒ S(   Ns   {:04}(   R   (   R   (   R…   (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyRƒ   $  s    (   R   R„   R‘   R'   R   (   R   R   R‚   Rƒ   R†   R   R   (    (   R…   s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_iter_items  s    	%c   
      ` s¹   t  |  ˆ  ˆ ƒ } ‡  f d †  } ‡ ‡ f d †  } x* t ˆ ƒ D] } | | ƒ | | | ƒ <q@ WxR t | j ƒ  ƒ D]> \ } \ } }	 |  j | | ƒ | ƒ |  j | | ƒ |	 ƒ qs Wd  S(   Nc         ` s   d j  |  ˆ  ƒ ˆ   S(   Ns   {:0{}}(   R   (   R   (   R.   (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR‚   3  s    c         ` s   d j  ˆ  |  d ˆ ƒ ˆ  S(   Ns   {:0{}}i   (   R   (   R   (   R…   R/   (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyRƒ   6  s    (   R   R„   R‘   R'   R   (
   R   R.   R/   R…   R   R‚   Rƒ   R†   R   R   (    (   R.   R…   R/   s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   check_sizing/  s    %c      	   C` s>   x7 t  d d ƒ D]& } |  j d | d | d d | ƒ q Wd  S(   Ni   i   R.   R/   R…   i   (   R„   R¡   (   R   R†   (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   test_sizingA  s    (   RO   RP   Rs   Ru   R€   R‡   Rˆ   RŠ   R—   R˜   R™   RŸ   R    R¡   R¢   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyR_   ¹   s   	†					)7	
		"		(   RQ   t
   __future__R    R   R   R*   RŒ   t   supportR   t   numbaR   t   numba.configR   R   RI   t   objectR   R&   R_   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_dictimpl.pyt   <module>   s   Š