ó
\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 d Z d	 Z d
 Z 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 typed-list
i    (   t   print_functiont   absolute_importt   divisionNi   (   t   TestCase(   t
   _helperlib(   t   biÿÿÿÿiþÿÿÿiýÿÿÿiüÿÿÿt   Listc           B` s³   e  Z d  Z d „  Z d „  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 d „  Z d „  Z d „  Z RS(   sQ   A wrapper around the C-API to provide a minimal list object for
    testing.
    c         C` s4   | |  _  | |  _ | |  _ |  j | | ƒ |  _ d S(   sÎ   
        Parameters
        ----------
        tc : TestCase instance
        item_size : int
            byte size for the items
        allocated : int
            number of items to allocate for
        N(   t   tct	   item_sizet	   allocatedt   list_newt   lp(   t   selfR   R   R	   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __init__   s    
			c         C` s   |  j  j |  j ƒ d  S(   N(   R   t   numba_list_freeR   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __del__*   s    c         C` s
   |  j  ƒ  S(   N(   t   list_length(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __len__-   s    c         C` s   |  j  | | ƒ S(   N(   t   list_setitem(   R   t   it   item(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __setitem__0   s    c         C` s   |  j  | ƒ S(   N(   t   list_getitem(   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __getitem__3   s    c         C` s
   t  |  ƒ S(   N(   t   ListIter(   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __iter__6   s    c         C` s   |  j  | ƒ d  S(   N(   t   list_delitem(   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __delitem__9   s    c         C` s   |  j  | ƒ d  S(   N(   t   list_append(   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   append<   s    iÿÿÿÿc         C` s   |  j  | ƒ S(   N(   t   list_pop(   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   pop?   s    c         C` sD   t  j ƒ  } |  j j t  j | ƒ | | ƒ } |  j j | t ƒ | S(   N(   t   ctypest   c_void_pR   t   numba_list_newt   byreft   assertEqualt   LIST_OK(   R   R   R	   R   t   status(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR
   D   s
    	c         C` s   |  j  j |  j ƒ S(   N(   R   t   numba_list_lengthR   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   L   s    c         C` sM   |  j  j |  j | | ƒ } | t k r6 t d ƒ ‚ n |  j  j | t ƒ d  S(   Ns   list index out of range(   R   t   numba_list_setitemR   t   LIST_ERR_INDEXt
   IndexErrorR$   R%   (   R   R   R   R&   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   O   s    c         C` sf   t  j |  j ƒ } |  j j |  j | | ƒ } | t k rH t d ƒ ‚ n |  j j | t	 ƒ | j
 Sd  S(   Ns   list index out of range(   R    t   create_string_bufferR   R   t   numba_list_getitemR   R)   R*   R$   R%   t   raw(   R   R   t   item_out_bufferR&   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   V   s    c         C` s/   |  j  j |  j | ƒ } |  j  j | t ƒ d  S(   N(   R   t   numba_list_appendR   R$   R%   (   R   R   R&   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   _   s    c         C` s°   | d k  s t  |  ƒ d k r+ t d ƒ n | d k rJ t  |  ƒ d } n  t j |  j ƒ } |  j j |  j | | ƒ } | t k r’ t d ƒ ‚ n |  j j	 | t
 ƒ | j Sd  S(   Niÿÿÿÿi    s   list index out of rangei   (   t   lenR*   R    R+   R   R   t   numba_list_popR   R)   R$   R%   R-   (   R   R   R.   R&   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   c   s    c         C` s]   t  | t ƒ rL |  j j |  j | j | j | j ƒ } |  j j | t	 ƒ n |  j
 | ƒ d  S(   N(   t
   isinstancet   sliceR   t   numba_list_delete_sliceR   t   startt   stopt   stepR$   R%   R   (   R   R   R&   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   r   s    c         C` s   |  j  j | |  j ƒ d  S(   N(   R   t   numba_list_iterR   (   R   t   itptr(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt	   list_iter~   s    c         C` s—   t  j d ƒ } |  j j | t  j | ƒ ƒ } | t k rH t d ƒ ‚ nK | t k r] t ‚ n6 |  j j	 | d ƒ t  j
 |  j j | j ƒ } | j Sd  S(   Ni    s   list mutated(   R    R!   R   t   numba_list_iter_nextR#   t   LIST_ERR_MUTATEDt
   ValueErrort   LIST_ERR_ITER_EXHAUSTEDt   StopIterationt   assertGreaterEqualt   c_charR   t   from_addresst   value(   R   R9   t   biR&   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   list_iter_next   s    		(   t   __name__t
   __module__t   __doc__R   R   R   R   R   R   R   R   R   R
   R   R   R   R   R   R   R:   RE   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR      s&   																	R   c           B` s/   e  Z d  Z d „  Z d „  Z d „  Z e Z RS(   s    An iterator for the `List`.
    c         C` sc   | |  _  |  j  j j ƒ  } t j | d ƒ |  _ t j |  j t j ƒ |  _ |  j  j	 |  j ƒ d  S(   Ni    (
   t   parentR   t   numba_list_iter_sizeofR    t   c_char_pt   it_state_buft   castR!   t   itR:   (   R   RI   t   itsize(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   “   s
    	c         C` s   |  S(   N(    (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR   š   s    c         C` s   |  j  j |  j ƒ S(   N(   RI   RE   RN   (   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   __next__   s    (   RF   RG   RH   R   R   RP   t   next(    (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyR      s
   			t   TestListImplc           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 RS(   c         C` s·  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
 g ƒ |  _ | d t  j | t  j t  j
 g ƒ |  _ | d	 t  j | t  j t  j
 g ƒ |  _ | d
 t  j | t  j t  j t  j g ƒ |  _ | d t  j ƒ |  _ | d d | | g ƒ |  _ | d 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_listimpl.pyt   wrapª   s    t	   test_listR
   t	   list_freeR   R   R   R   R   t   list_delete_slicet   list_iter_sizeofR:   RE   N(    (   R    R!   t   c_intt   numba_test_listt   POINTERt	   c_ssize_tR"   t   NoneR   R'   RK   R(   R/   R,   R1   R4   t   c_size_tRJ   R8   R;   (   R   t   list_tt   iter_tRY   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   setUp¤   sf    		$!c         C` s    |  j  ƒ  } |  j | d ƒ d  S(   Ni    (   R_   R$   (   R   t   ret(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_simple_c_testÿ   s    c         C` s,   t  |  d d ƒ } |  j t | ƒ d ƒ d  S(   Ni   i    (   R   R$   R0   (   R   t   l(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_length  s    c         C` sS   t  |  d d ƒ } | j d ƒ |  j t | ƒ d ƒ | d } |  j | d ƒ d  S(   Ni   i   t   abcdefghi    (   R   R   R$   R0   (   R   Ri   t   r(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_append_get_string  s
    
c         C` so   t  |  d d ƒ } | j t j d d ƒ ƒ |  j t | ƒ d ƒ t j d | d ƒ d } |  j | d ƒ d  S(   Ni   i   t   qi    (   R   R   t   structt   packR$   R0   t   unpack(   R   Ri   Rl   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_append_get_int  s
    c         C` sv   t  |  d d ƒ } | j d ƒ |  j t | ƒ d ƒ | j d ƒ |  j t | ƒ d ƒ | d } |  j | d ƒ d  S(   Ni   i   Rk   t   hijklmnoi   (   R   R   R$   R0   (   R   Ri   Rl   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_append_get_string_realloc  s    
c         C` sT   t  |  d d ƒ } |  j t ƒ  | d Wd  QX|  j t ƒ  d | d <Wd  QXd  S(   Ni   i    Rk   (   R   t   assertRaisesR*   (   R   Ri   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt!   test_set_item_getitem_index_error  s
    c         C` s†   t  |  d d ƒ } d d d d d d d	 d
 g } x | D] } | j | ƒ q7 Wg  } x | D] } | j | ƒ q[ W|  j | | ƒ d  S(   Ni   i    t   aR   t   ct   dt   et   ft   gt   h(   R   R   R$   (   R   Ri   t   valuesR   t   receivedt   j(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt	   test_iter&  s    c         C` so  t  |  d d ƒ } d d d d d d d	 d
 g } x | D] } | j | ƒ q7 W|  j t | ƒ d ƒ | j ƒ  } |  j d
 | ƒ |  j t | ƒ d ƒ g  | D] } | ^ q } |  j | | d  ƒ | j d ƒ } |  j d | ƒ |  j t | ƒ d ƒ | j d ƒ } |  j d | ƒ |  j t | ƒ d ƒ d d d d d	 g } g  | D] } | ^ qI} |  j | | ƒ d  S(   Ni   i    Rw   R   Rx   Ry   Rz   R{   R|   R}   i   i   iÿÿÿÿi   i   i   (   R   R   R$   R0   R   (   R   Ri   R~   R   R   R€   t   expected(    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_pop0  s&    c         C` s6   t  |  d d ƒ } |  j t ƒ  | j ƒ  Wd  QXd  S(   Ni   i    (   R   Ru   R*   R   (   R   Ri   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_pop_index_errorI  s    c         C` so  t  |  d d ƒ } d d d d d d d	 d
 g } x | D] } | j | ƒ q7 W|  j t | ƒ d ƒ | j ƒ  } |  j d | ƒ |  j t | ƒ d ƒ g  | D] } | ^ q } |  j | | d  ƒ | j d ƒ } |  j d | ƒ |  j t | ƒ d ƒ | j d ƒ } |  j d | ƒ |  j t | ƒ d ƒ d d d d d	 g } g  | D] } | ^ qI} |  j | | ƒ d  S(   Ni   i    t   aaaat   bbbbt   cccct   ddddt   eeeet   fffft   ggggt   hhhhhi   t   hhhhi   iÿÿÿÿi   i   i   (   R   R   R$   R0   R   (   R   Ri   R~   R   R   R€   R‚   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_pop_byteN  s(    c         C` st  t  |  d d ƒ } d d d d d d d	 d
 g } x | D] } | j | ƒ q7 W|  j t | ƒ d ƒ | d d d … =|  j t | ƒ d ƒ |  j t | ƒ | d d d … ƒ | d d d … =|  j t | ƒ d ƒ |  j t | ƒ d d d
 g ƒ | d d d … =|  j t | ƒ d ƒ |  j t | ƒ d d g ƒ | d d d … =|  j t | ƒ d ƒ |  j t | ƒ g  ƒ d  S(   Ni   i    Rw   R   Rx   Ry   Rz   R{   R|   R}   i   i   i   i   (   R   R   R$   R0   t   list(   R   Ri   R~   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_delete_sliceh  s"    #c         ` s™   t  |  ˆ  d ƒ } ‡  ‡ f d †  } x' t ˆ ƒ D] } | j | | ƒ ƒ q1 W|  j t | ƒ ˆ ƒ x. t ˆ ƒ D]  } |  j | | | | ƒ ƒ qq Wd  S(   Ni    c         ` s"   t  d j ˆ |  d ˆ  ƒ ˆ   ƒ S(   Ns   {:0{}}i   (   R   t   format(   t   v(   R   t   nmax(    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt	   make_itemˆ  s    (   R   t   rangeR   R$   R0   (   R   R   R“   Ri   R”   R   (    (   R   R“   s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   check_sizing„  s    c         C` s8   x1 t  d d ƒ D]  } |  j d | d d | ƒ q Wd  S(   Ni   i   R   R“   i   (   R•   R–   (   R   R   (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   test_sizing“  s    (   RF   RG   Rf   Rh   Rj   Rm   Rr   Rt   Rv   R   Rƒ   R„   RŽ   R   R–   R—   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyRR   £   s   	[								
					(   RH   t
   __future__R    R   R   R    Ro   t   supportR   t   numbaR   t	   numba.sixR   R%   R)   t   LIST_ERR_NO_MEMORYR<   R>   t   objectR   R   RR   (    (    (    s8   lib/python2.7/site-packages/numba/tests/test_listimpl.pyt   <module>   s   {