U
    9%e?                     @   sx   d Z ddlZddlZddlmZ ddlmZ dZdZdZ	dZ
dZd	ZG d
d deZG dd deZG dd deZdS )z2
Testing C implementation of the numba typed-list
    N)TestCase)
_helperlibc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zedd Zedd Zdd Zdd Zdd Zd8ddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7S )9ListzQA wrapper around the C-API to provide a minimal list object for
    testing.
    c                 C   s   || _ || _| ||| _dS )z
        Parameters
        ----------
        tc : TestCase instance
        item_size : int
            byte size for the items
        allocated : int
            number of items to allocate for
        N)tc	item_sizelist_newlp)selfr
   r   	allocated r   X/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_listimpl.py__init__   s    
zList.__init__c                 C   s   | j | j d S N)r
   numba_list_freer   r   r   r   r   __del__(   s    zList.__del__c                 C   s   |   S r   )list_lengthr   r   r   r   __len__+   s    zList.__len__c                 C   s   |  ||S r   )list_setitemr   iitemr   r   r   __setitem__.   s    zList.__setitem__c                 C   s
   |  |S r   )list_getitemr   r   r   r   r   __getitem__1   s    zList.__getitem__c                 C   s   t | S r   )ListIterr   r   r   r   __iter__4   s    zList.__iter__c                 C   s   |  | d S r   )list_delitemr   r   r   r   __delitem__7   s    zList.__delitem__c                 C   s6   |dk st | dkrtd n|dkr2t | d }|S )Nr   r   list index out of range   )len
IndexErrorr   r   r   r   handle_index:   s
    
zList.handle_indexc                 C   s   |   S r   )list_allocatedr   r   r   r   r   C   s    zList.allocatedc                 C   s   |   S r   )list_is_mutabler   r   r   r   
is_mutableG   s    zList.is_mutablec                 C   s
   |  dS )Nr&   list_set_is_mutabler   r   r   r   set_mutableK   s    zList.set_mutablec                 C   s
   |  dS Nr   r-   r   r   r   r   set_immutableN   s    zList.set_immutablec                 C   s   |  | d S r   )list_append)r   r   r   r   r   appendQ   s    zList.appendr   c                 C   s
   |  |S r   )list_popr   r   r   r   popT   s    zList.popc                 C   s0   t  }| jt |||}| j|t |S r   )ctypesc_void_pr
   numba_list_newbyrefassertEqualLIST_OK)r   r   r   r   statusr   r   r   r   Y   s      zList.list_newc                 C   s   | j | jS r   )r
   numba_list_lengthr   r   r   r   r   r   a   s    zList.list_lengthc                 C   s   | j | jS r   )r
   numba_list_allocatedr   r   r   r   r   r*   d   s    zList.list_allocatedc                 C   s   | j | jS r   )r
   numba_list_is_mutabler   r   r   r   r   r+   g   s    zList.list_is_mutablec                 C   s   | j | j|S r   )r
   numba_list_set_is_mutabler   )r   r,   r   r   r   r.   j   s    zList.list_set_is_mutablec                 C   sH   | j | j||}|tkr$tdn |tkr6tdn| j |t d S )Nr%   list is immutable)	r
   numba_list_setitemr   LIST_ERR_INDEXr(   LIST_ERR_IMMUTABLE
ValueErrorr:   r;   )r   r   r   r<   r   r   r   r   m   s    

zList.list_setitemc                 C   sR   |  |}t| j}| j| j||}|tkr:tdn| j	|t
 |jS d S )Nr%   )r)   r6   create_string_bufferr   r
   numba_list_getitemr   rC   r(   r:   r;   raw)r   r   Zitem_out_bufferr<   r   r   r   r   v   s    

zList.list_getitemc                 C   s2   | j | j|}|tkr td| j |t d S )NrA   )r
   numba_list_appendr   rD   rE   r:   r;   )r   r   r<   r   r   r   r2      s    zList.list_appendc                 C   s"   |  |}| |}| | |S r   )r)   r   r#   r   r   r   r   r4      s    


zList.list_popc                 C   s   t |trD| j| j|j|j|j}|tkr4t	d| j
|t nJ| |}| j| j|}|tkrptdn|tkrt	d| j
|t d S )NrA   r%   )
isinstanceslicer
   numba_list_delete_slicer   startstopsteprD   rE   r:   r;   r)   numba_list_delitemrC   r(   )r   r   r<   r   r   r   r#      s     



zList.list_delitemc                 C   s   | j || j d S r   )r
   numba_list_iterr   )r   itptrr   r   r   	list_iter   s    zList.list_iterc                 C   sj   t d}| j|t |}|tkr0tdn6|tkr>tn(| j	|d t j
| j |j}|jS d S )Nr   zlist mutated)r6   r7   r
   numba_list_iter_nextr9   LIST_ERR_MUTATEDrE   LIST_ERR_ITER_EXHAUSTEDStopIterationZassertGreaterEqualZc_charr   Zfrom_addressvalue)r   rR   Zbir<   r   r   r   r   list_iter_next   s    
 
zList.list_iter_nextN)r   )__name__
__module____qualname____doc__r   r   r   r   r    r"   r$   r)   propertyr   r,   r/   r1   r3   r5   r   r   r*   r+   r.   r   r   r2   r4   r#   rS   rY   r   r   r   r   r	      s:   	


	
r	   c                   @   s,   e Zd ZdZdd Zdd Zdd ZeZdS )	r!   z An iterator for the `List`.
    c                 C   sF   || _ | j j }tj| d| _t| jtj| _| j 	| j d S r0   )
parentr
   numba_list_iter_sizeofr6   c_char_pZit_state_bufcastr7   itrS   )r   r_   Zitsizer   r   r   r      s
    zListIter.__init__c                 C   s   | S r   r   r   r   r   r   r"      s    zListIter.__iter__c                 C   s   | j | jS r   )r_   rY   rc   r   r   r   r   __next__   s    zListIter.__next__N)rZ   r[   r\   r]   r   r"   rd   nextr   r   r   r   r!      s
   r!   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestListImplc                 C   s\  t j}t j}ddd}|dt j| _|dt jt |t jt jg| _|dd|g| _|dt j|g| _|d	t j|g| _	|d
t j|g| _
|d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g| _|dt j|t jt jt jg| _|dt j| _|dd||g| _|dt j|t t jg| _dS )zEBind to the c_helper library and provide the ctypes wrapper.
        r   c                 S   s   t j|f| }|tj|  S r   )r6   Z	CFUNCTYPEr   Z	c_helpers)namerestypeZargtypesprotor   r   r   wrap   s    z TestListImpl.setUp.<locals>.wrapZ	test_listr   Z	list_freeNr   r*   r+   r.   r   r2   r   r#   Zlist_delete_sliceZlist_iter_sizeofrS   rY   )r   )r6   r7   c_intnumba_test_listZPOINTERZ	c_ssize_tr8   r   r=   r>   r?   r@   ra   rB   rI   rG   rP   rL   Zc_size_tr`   rQ   rT   )r   Zlist_tZiter_trj   r   r   r   setUp   s    
		
zTestListImpl.setUpc                 C   s   |   }| |d d S r0   )rl   r:   )r   retr   r   r   test_simple_c_test4  s    zTestListImpl.test_simple_c_testc                 C   s    t | dd}| t|d d S N   r   )r	   r:   r'   r   lr   r   r   test_length9  s    zTestListImpl.test_lengthc                 C   s<   t dD ].}t| d|}| t|d | |j| qd S )N   rq   r   )ranger	   r:   r'   r   )r   r   rs   r   r   r   test_allocation=  s    zTestListImpl.test_allocationc                 C   s>   t | dd}|d | t|d |d }| |d d S )Nrq   r&      abcdefghr   r	   r3   r:   r'   r   rs   rr   r   r   test_append_get_stringC  s
    
z#TestListImpl.test_append_get_stringc                 C   sR   t | dd}|tdd | t|d td|d d }| |d d S )Nrq   r&   qr   )r	   r3   structpackr:   r'   unpackrz   r   r   r   test_append_get_intJ  s
    z TestListImpl.test_append_get_intc                 C   sX   t | dd}|d | t|d |d | t|d |d }| |d d S )Nrq   r&   rx   s   hijklmno   ry   rz   r   r   r   test_append_get_string_reallocQ  s    

z+TestListImpl.test_append_get_string_reallocc              	   C   sL   t | dd}| t |d  W 5 Q R X | t d|d< W 5 Q R X d S )Nrq   r   rx   )r	   assertRaisesr(   rr   r   r   r   !test_set_item_getitem_index_errorZ  s
    z.TestListImpl.test_set_item_getitem_index_errorc                 C   s\   t | dd}ddddddd	d
g}|D ]}|| q$g }|D ]}|| q<| || d S )Nr&   r      a   b   c   d   e   f   g   h)r	   r3   r:   )r   rs   valuesr   receivedjr   r   r   	test_itera  s    zTestListImpl.test_iterc                 C   s  t | dd}ddddddd	d
g}|D ]}|| q$| t|d | }| d
| | t|d dd |D }| ||d d  |d}| d| | t|d |d}| d| | t|d ddddd	g}dd |D }| || d S )Nr&   r   r   r   r   r   r   r   r   r   rq      c                 S   s   g | ]}|qS r   r   .0r   r   r   r   
<listcomp>u  s     z)TestListImpl.test_pop.<locals>.<listcomp>r      r      c                 S   s   g | ]}|qS r   r   r   r   r   r   r     s     r	   r3   r:   r'   r5   r   rs   r   r   r   expectedr   r   r   test_popk  s&    

zTestListImpl.test_popc              	   C   s.   t | dd}| t |  W 5 Q R X d S rp   )r	   r   r(   r5   rr   r   r   r   test_pop_index_error  s    z!TestListImpl.test_pop_index_errorc                 C   s  t | dd}ddddddd	d
g}|D ]}|| q$| t|d | }| d| | t|d dd |D }| ||d d  |d}| d| | t|d |d}| d| | t|d ddddd	g}dd |D }| || d S )N   r   s   aaaas   bbbbs   ccccs   dddds   eeees   ffffs   ggggs   hhhhhrq   s   hhhhr   c                 S   s   g | ]}|qS r   r   r   r   r   r   r     s     z.TestListImpl.test_pop_byte.<locals>.<listcomp>r   r   r   r   c                 S   s   g | ]}|qS r   r   r   r   r   r   r     s     r   r   r   r   r   test_pop_byte  s0       

zTestListImpl.test_pop_bytec                 C   s   t | dd}ddddddd	d
g}|D ]}|| q$| t|d |d= | t|d | t||dd   |d= | t|d | t||dd  |d= | t|d | t|ddddd	g d S )Nr&   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r	   r3   r:   r'   listr   rs   r   r   r   r   r   test_delitem  s    zTestListImpl.test_delitemc                 C   s  t | dd}ddddddd	d
g}|D ]}|| q$| t|d |ddd= | t|d | t||ddd  |ddd= | t|d | t|ddd
g |ddd= | t|d | t|ddg |ddd= | t|d | t|g  d S )Nr&   r   r   r   r   r   r   r   r   r   rq   r   r      r   r   r   r   r   test_delete_slice  s"    zTestListImpl.test_delete_slicec                    sl   t |  d} fdd}tD ]}||| q"| t| tD ]}| || || qNd S )Nr   c                    s&   d |  d  d}|d   S )Nz{:0{}}r&   zlatin-1)formatencode)vtmpr   nmaxr   r   	make_item  s    z,TestListImpl.check_sizing.<locals>.make_item)r	   rv   r3   r:   r'   )r   r   r   rs   r   r   r   r   r   check_sizing  s    zTestListImpl.check_sizingc                 C   s&   t ddD ]}| j|d| d q
d S )Nr&   ru   r   r   )rv   r   r   r   r   r   test_sizing  s    zTestListImpl.test_sizingc              	   C   s  t | dd}tdd}|| | |j | t|d td|d d }| |d |	  | 
|j | t}|| W 5 Q R X | dt|j | t}||d< W 5 Q R X | dt|j | t}|  W 5 Q R X | dt|j | t}|d= W 5 Q R X | dt|j | t}|ddd= W 5 Q R X | dt|j |  | |j | t|d td|d d }| |d d S )Nrq   r&   r}   r   rA   )r	   r~   r   r3   
assertTruer,   r:   r'   r   r1   ZassertFalser   rE   ZassertInstr	exceptionr5   r/   )r   rs   oner{   Zraisesr   r   r   test_mutability  s:    
zTestListImpl.test_mutabilityN)rZ   r[   r\   rm   ro   rt   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rf      s"   m	
rf   )r]   r6   r~   Znumba.tests.supportr   Znumbar   r;   rC   ZLIST_ERR_NO_MEMORYrU   rV   rD   objectr	   r!   rf   r   r   r   r   <module>   s     