U
    ,d                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZ	d dl
mZmZ d dlmZmZmZmZmZ d dlZd dlmZ d dlmZmZmZ d dlmZmZmZ d dlmZ d d	lm Z  e Z!d
e!_"e Z#d
e#_$e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" Z0d#d$ Z1d%d& Z2d'd( Z3d)d* Z4d+d, Z5d-d. Z6d/d0 Z7d1d2 Z8d3d4 Z9d5d6 Z:d7d8 Z;d9d: Z<d;d< Z=d=d> Z>d?d@ Z?dAdB Z@dCdD ZAdEdF ZBdGdH ZCdIdJ ZDdKdL ZEdMdN ZFdOdP ZGdQdR ZHdSdT ZIdUdV ZJdWdX ZKdYdZ ZLd[d\ ZMd]d^ ZNd_d` ZOdadb ZPdcdd ZQdedf ZRdgdh ZSdidj ZTdkdl ZUdmdn ZVdodp ZWdqdr ZXdsdt ZYdudv ZZdwdx Z[dydz Z\d{d| Z]d}d~ Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd ZeG dd deeZfG dd deeZgG dd deeZhG dd deeZiG dd deiZjdd ZkG dd deiZlG dd demZnG dd demZoG dd deiZpG dd deeZqG dd deeZresdkret  dS )    )
namedtupleN)compile_isolatedFlags)jittypeofnjitliteral_unroll	literally)testing)typesutilserrors)TestCaseMemoryLeakMixintag)jitclass)overloadTPointabc                 C   s   d S N xr   r   :/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_lists.pynoop   s    r   c                 C   s   d}| D ]}||7 }q|S )z"
    Expect a list of numbers
    r   r   r   resvr   r   r   unbox_usecase   s    
r    c                 C   s   d}| D ]}|t |7 }q|S )z!
    Expect a list of tuples
    r   lenr   r   r   r   unbox_usecase2(   s    r#   c                 C   s"   | \}}|}|D ]}||7 }q|S )z3
    Expect a (number, list of numbers) tuple.
    r   r   r   r   r   r   r   r   r   unbox_usecase31   s
    
r%   c                 C   s&   | \}}|}|D ]}|t |7 }q|S )z2
    Expect a (number, list of tuples) tuple.
    r!   r$   r   r   r   unbox_usecase4;   s
    r&   c                 C   s
   | ||gS r   r   )r   yzr   r   r   create_listF   s    r)   c                 C   s   | ||g|||ggS r   r   )r   r'   r(   r   r   cr   r   r   create_nested_listI   s    r+   c                   C   s   t dd tdD S )Nc                 S   s   g | ]}|d  qS    r   .0r   r   r   r   
<listcomp>M   s     z'list_comprehension1.<locals>.<listcomp>
   sumranger   r   r   r   list_comprehension1L   s    r5   c                   C   s   t dd tdD S )Nc                 S   s   g | ]}|d  dkr|qS )r-   r   r   r.   r   r   r   r0   P   s      z'list_comprehension2.<locals>.<listcomp>r1   r2   r   r   r   r   list_comprehension2O   s    r6   c                   C   s   t dd tdD S )Nc                 S   s   g | ]}t |d qS r,   )mathpowr.   r   r   r   r0   S   s     z'list_comprehension3.<locals>.<listcomp>r1   r2   r   r   r   r   list_comprehension3R   s    r9   c                   C   s   t dd tdD S )Nc                 S   s"   g | ]}t d D ]}|| qqS r1   r4   )r/   r   r'   r   r   r   r0   V   s     
  z'list_comprehension4.<locals>.<listcomp>r1   r2   r   r   r   r   list_comprehension4U   s    r<   c                   C   s   dd t dD S )Nc                 S   s   g | ]}|d  qS r,   r   r.   r   r   r   r0   Y   s     z'list_comprehension5.<locals>.<listcomp>r1   r;   r   r   r   r   list_comprehension5X   s    r=   c                   C   s   dd t dD S )Nc                 S   s   g | ]}d d t |D qS )c                 S   s   g | ]}|qS r   r   r.   r   r   r   r0   \   s     z2list_comprehension6.<locals>.<listcomp>.<listcomp>r;   )r/   r'   r   r   r   r0   \   s     z'list_comprehension6.<locals>.<listcomp>   r;   r   r   r   r   list_comprehension6[   s    r?   c                 C   s   t t| S r   listr4   nr   r   r   list_constructor_   s    rD   c                   C   s   t  S r   rA   r   r   r   r   list_constructor_emptyb   s    rF   c                 C   s   t  }|| S r   )rA   append)rC   r'   r   r   r   #list_constructor_empty_but_typeableg   s    rH   c                 C   s*   g }| d t| D ]}| | q|S N*   rG   r4   rC   lir   r   r   list_appendm   s
    
rO   c                 C   s*   g }| d t| D ]}| | q|S )N      E@rK   rL   r   r   r   list_append_heterogeneoust   s
    
rQ   c                 C   s:   g }| t|  | |d d  | t| dd |S )Nr   extendr4   rC   rM   r   r   r   list_extend{   s
    rV   c                 C   s>   g }| t|  | |d d  | d | dg |S )NrR   )   rJ   g     ^@rS   rU   r   r   r   list_extend_heterogeneous   s    
rX   c                 C   s6   t t| }d}t|dkr2|t||  7 }q|S Nr   )rA   r4   r"   pop)rC   rM   r   r   r   r   	list_pop0   s
    r[   c                 C   s   t t| }||}||fS r   )rA   r4   rZ   )rC   rN   rM   r   r   r   r   	list_pop1   s    
r\   c                 C   s   t t| }t|S r   rA   r4   r"   rU   r   r   r   list_len   s    r^   c                 C   s\   t t| }d}tt|D ]}||||  7 }qtt| dD ]}||||  8 }qB|S rY   r]   rC   rM   r   rN   r   r   r   list_getitem   s    r`   c                 C   sz   t t| }d}tt|D ]}|||  ||< qtt| dD ]}|||  ||< qBtt|D ]}||| 7 }qd|S rY   r]   r_   r   r   r   list_setitem   s    ra   c                 C   s   t t| }||| S r   r@   rC   startstoprM   r   r   r   list_getslice2   s    re   c                 C   s   t t| }|||| S r   r@   )rC   rc   rd   steprM   r   r   r   list_getslice3   s    rg   c                 C   s.   t t| }t tdd| }||||< |S Nd   r@   )rC   Zn_sourcerc   rd   rM   r   r   r   r   list_setslice2   s    rj   c                 C   sN   t t| }|||| }tt|D ]}||  d7  < q&|||||< |S rh   r]   )rC   rc   rd   rf   rM   r   rN   r   r   r   list_setslice3   s    rk   c                 C   s,   t t| }t tdd| ||||< |S rh   r@   )rC   n_srcrc   rd   rf   rM   r   r   r   list_setslice3_arbitrary   s    rm   c                 C   s   t t| }|d d = |S r   r@   rU   r   r   r   list_delslice0   s    
rn   c                 C   s$   t t| }||d = |d |= |S r   r@   rb   r   r   r   list_delslice1   s    

ro   c                 C   s   t t| }|||= |S r   r@   rb   r   r   r   list_delslice2   s    
rp   c                 C   s   t t| }|  |S r   )rA   r4   clearrU   r   r   r   
list_clear   s    rr   c                 C   s&   t t| }| }|d ||fS rI   )rA   r4   copyrG   )rC   rM   llr   r   r   	list_copy   s    
ru   c                 C   s2   t t| }d}t|D ]\}}||| 7 }q|S rY   )rA   r4   	enumerate)rC   rM   r   rN   r   r   r   r   list_iteration   s
    rw   c              	   C   sH   t t| }d|kd|k| d |k| |kd|kd|k| d |k| |kfS Nr      r@   rU   r   r   r   list_contains   s      
 rz   c                 C   s   t t| dd}||S Nr   rR   rA   r4   indexrC   r   rM   r   r   r   list_index1   s    r   c                 C   s   t t| dd}|||S r{   r|   )rC   r   rc   rM   r   r   r   list_index2   s    r   c                 C   s   t t| dd}||||S r{   r|   )rC   r   rc   rd   rM   r   r   r   list_index3   s    r   c                 C   s"   t t| d dd}|| |S )Nry   rR   )rA   r4   remover~   r   r   r   list_remove  s    
r   c                 C   s   t td| }||| |S rY   )rA   r4   insert)rC   posr   rM   r   r   r   list_insert	  s    r   c                 C   s*   g }t | D ]}||d@  q||S )Nr>   )r4   rG   count)rC   r   rM   r   r   r   r   
list_count  s    r   c                 C   s   t t| }|  |S r   )rA   r4   reverserU   r   r   r   list_reverse  s    r   c                 C   s<   t td| }t tdd| }|| }|d |||fS )Nr   ri   rJ   )rA   r4   rG   )mrC   r   r   r   r   r   r   list_add  s
    
r   c                  C   s<   dg} dg}| | }||  }|  d | d | |||fS )Nry          @r>         @rG   )r   r   r*   dr   r   r   list_add_heterogeneous   s    

r   c                 C   s0   t td| }t tdd| }||7 }||fS )Nr   ri   r@   )r   rC   r   r   r   r   r   list_add_inplace*  s    r   c                  C   s$   dg} dg}| |7 } || 7 }| |fS )Nry   r   r   r   r   r   r   list_add_inplace_heterogeneous0  s
    r   c                 C   s   t t| }|| S r   r@   rC   r   r   r   r   r   list_mul7  s    r   c                 C   s   t t| }|| S r   r@   r   r   r   r   	list_mul2;  s    r   c                 C   s   t t| }||9 }|S r   r@   r   r   r   r   list_mul_inplace?  s    r   c                 C   s    t t| }t||rdndfS )NTF)rA   r4   bool)rC   r   r   r   r   	list_boolD  s    r   c                 C   s   t | t |kS r   rE   r   r   r   r   
eq_usecaseH  s    r   c                 C   s   t | t |kS r   rE   r   r   r   r   
ne_usecaseK  s    r   c                 C   s   t | t |kS r   rE   r   r   r   r   
gt_usecaseN  s    r   c                 C   s   t | t |kS r   rE   r   r   r   r   
ge_usecaseQ  s    r   c                 C   s   t | t |k S r   rE   r   r   r   r   
lt_usecaseT  s    r   c                 C   s   t | t |kS r   rE   r   r   r   r   
le_usecaseW  s    r   c                 C   s8   t t| }|}|d d  }||k||k	||k||k	fS r   r@   )rC   r   r   r*   r   r   r   identity_usecaseZ  s    r   c                  C   s,   dg} d| d< d}| D ]}||A }q| |fS )NFTr   r   )rM   r   r   r   r   r   bool_list_usecase`  s    
r   c                 C   s,   |   }|   }d| d< | | | ||fS )NrP   r   rZ   rT   rM   rt   r   r'   r   r   r   reflect_simplei  s
    
r   c                 C   s@   |d rddddg} |   }|   }d| d< | | | ||fS )Nr   g      &@g      6@g     @@g      F@rP   r   r   r   r   r   reflect_conditionalp  s    
r   c                 C   s   |  d td S rI   )rG   ZeroDivisionErrorrM   r   r   r   reflect_exceptionz  s    
r   c                 C   s   |  |  | |kS r   )rG   rZ   )rM   rt   r   r   r   reflect_dual~  s    r   c                   @   s   e Zd Zdd Zdd Zd}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(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+dTdU Z,dVdW Z-dXdY Z.dZd[ Z/d\d] Z0d^d_ Z1d`da Z2e34e5j6dbkdcddde Z7dfdg Z8dhdi Z9djdk Z:dldm Z;dndo Z<dpdq Z=drds Z>dtdu Z?dvdw Z@dxdy ZAdzd{ ZBd|S )~	TestListsc                 C   s@   t }t|tjtjtjf}|j}| |ddd|ddd d S Nry   r-   r>   )r)   r   r   int32entry_pointassertEqualselfpyfuncZcrcfuncr   r   r   test_create_list  s    zTestLists.test_create_listc              
   C   sX   t }t|tjtjtjtjtjtjf}|j}| |dddddd|dddddd d S Nry   r-   r>      rW      )r+   r   r   r   r   r   r   r   r   r   test_create_nested_list  s      z!TestLists.test_create_nested_listTc                 C   s>   t dd|}dD ]&}|r | jn| j}||||| qd S )NTZnopython)r   r>      F   i  )r   assertPreciseEqualr   )r   r   preciser   rC   eqr   r   r   check_unary_with_size  s    zTestLists.check_unary_with_sizec                 C   s   |  t d S r   )r   rD   r   r   r   r   test_constructor  s    zTestLists.test_constructorc              	   C   sf   |    tddt}| tj}|  W 5 Q R X t|j}| d| | d| | d| d S )NTr   z!Cannot infer the type of variablezlist(undefined)z&For Numba to be able to compile a list)	disable_leak_checkr   rF   assertRaisesr   TypingErrorstr	exceptionassertIn)r   r   raiseserrmsgr   r   r   test_constructor_empty  s    
z TestLists.test_constructor_emptyc                 C   s`   t ddddgddgt dgg}t}|D ].}tdd	|}||}||}| || q,d S )
Nry   g      $@y      ?      @   g      1@g      ,@r1   Tr   )npr   arrayrH   r   r   )r   argsr   argr   expectedgotr   r   r   #test_constructor_empty_but_typeable  s    $z-TestLists.test_constructor_empty_but_typeablec                 C   s   |  t d S r   )r   rO   r   r   r   r   test_append  s    zTestLists.test_appendc                 C   s   | j tdd d S NF)r   )r   rQ   r   r   r   r   test_append_heterogeneous  s    z#TestLists.test_append_heterogeneousc                 C   s   |  t d S r   )r   rV   r   r   r   r   test_extend  s    zTestLists.test_extendc                 C   s   | j tdd d S r   )r   rX   r   r   r   r   test_extend_heterogeneous  s    z#TestLists.test_extend_heterogeneousc                 C   s   |  t d S r   )r   r[   r   r   r   r   	test_pop0  s    zTestLists.test_pop0c              
   C   sj   t }tdd|}dD ]N}dd|d |d dd| d	 | d fD ] }|||}| |||| qBqd S )
NTr   rW   (   r   ry   r-   rR   r>   )r\   r   r   )r   r   r   rC   rN   r   r   r   r   	test_pop1  s    ,
zTestLists.test_pop1c              	   C   s~   |    tddt}| t}|dd W 5 Q R X | t|jd | t}|dd W 5 Q R X | t|jd d S )NTr   r   rW   zpop from empty listry   zpop index out of range)r   r   r\   r   
IndexErrorr   r   r   )r   r   cmr   r   r   test_pop_errors  s    zTestLists.test_pop_errorsc                 C   sx   t }tdd|}dD ]\}dd|d |d |d dd| d	 | d g	}|D ]$}|||d
}| |||d
| qLqd S )NTr   r   r   ry   r-   rR   r   r>   rJ   )r   r   r   )r   r   r   rC   indicesrN   r   r   r   r   test_insert  s    .zTestLists.test_insertc                 C   s   |  t d S r   )r   r^   r   r   r   r   test_len  s    zTestLists.test_lenc                 C   s   |  t d S r   )r   r`   r   r   r   r   test_getitem  s    zTestLists.test_getitemc                 C   s   |  t d S r   )r   ra   r   r   r   r   test_setitem  s    zTestLists.test_setitemc           	   	   C   s   t dd|}ddg}|D ]`}dd|d dd	| d
 | d | g}t||D ](\}}||||}| ||||| qPqd S NTr   rW   r   r   ry   r-   rR   r   r>   r   	itertoolsproductr   )	r   r   r   sizesrC   r   rc   rd   r   r   r   r   check_slicing2  s    &zTestLists.check_slicing2c                 C   s   |  t d S r   )r   re   r   r   r   r   test_getslice2  s    zTestLists.test_getslice2c           
   	   C   s   t }tdd|}ddg}t||D ]h\}}dd|d dd	| d
 | d | g}t||D ],\}}|||||}	| ||||||	 q`q&d S r   )rj   r   r   r   r   )
r   r   r   r   rC   rl   r   rc   rd   r   r   r   r   test_setslice2  s    &zTestLists.test_setslice2c           
   	   C   s   t }tdd|}dD ]v}dd|d dd| d	 | d | g}d
ddddg}t|||D ].\}}}|||||}	| ||||||	 q\qd S NTr   r:   r   ry   r-   rR   r   r>   r   )rg   r   r   r   r   
r   r   r   rC   r   Zstepsrc   rd   rf   r   r   r   r   test_getslice3  s    &zTestLists.test_getslice3c           
   	   C   s   t }tdd|}dD ]v}dd|d dd| d	 | d | g}d
ddddg}t|||D ].\}}}|||||}	| ||||||	 q\qd S r   )rk   r   r   r   r   r   r   r   r   test_setslice3  s    &zTestLists.test_setslice3c              	   C   sf   |    t}tdd|}|ddddd | t}|dddd	d W 5 Q R X | d
t|j d S )NTr   rW   r1   r   r-   ry   ri   r>   zcannot resize)r   rm   r   r   
ValueErrorr   r   r   r   r   r   r   r   r   r   test_setslice3_resize  s    zTestLists.test_setslice3_resizec                 C   s   |  t d S r   )r   rn   r   r   r   r   test_delslice0  s    zTestLists.test_delslice0c                 C   s   |  t d S r   )r   ro   r   r   r   r   test_delslice1  s    zTestLists.test_delslice1c                 C   s   |  t d S r   )r   rp   r   r   r   r   test_delslice2   s    zTestLists.test_delslice2c              	   C   sT   |    t}tdd|}| t}|dddd W 5 Q R X | t|jd d S )NTr   r1   ry   r-   r   zslice step cannot be zero)r   rg   r   r   r   r   r   r   r   r   r   r   test_invalid_slice#  s    zTestLists.test_invalid_slicec                 C   s   |  t d S r   )r   rw   r   r   r   r   test_iteration+  s    zTestLists.test_iterationc                 C   s   |  t d S r   )r   r   r   r   r   r   test_reverse.  s    zTestLists.test_reversec                 C   s   |  t d S r   )r   rz   r   r   r   r   test_contains1  s    zTestLists.test_containsc                 C   sT   z|| }W n2 t k
r>   | t  ||  W 5 Q R X Y nX | || | d S r   )r   r   r   )r   r   r   r   r   r   r   r   check_index_result4  s    zTestLists.check_index_resultc                 C   s:   |    t}tdd|}dD ]}| ||d|f qd S )NTr   r   ry   rW   r1   ir   )r   r   r   r   r   r   r   r   r   r   r   test_index1=  s
    zTestLists.test_index1c                 C   sx   |    t}tdd|}d}dD ]P}dd|d |d |d dd	| d
 | d g	}|D ]}| ||d||f qXq"d S NTr   r   r   r   ry   r-   rR   r   r>   )r   r   r   r   )r   r   r   rC   r   r   rc   r   r   r   test_index2D  s    .zTestLists.test_index2c                 C   s   |    t}tdd|}d}dD ]^}dd|d |d |d dd	| d
 | d g	}t||D ]\}}| ||d|||f q`q"d S r   )r   r   r   r   r   r   )r   r   r   rC   r   r   rc   rd   r   r   r   test_index3N  s    .zTestLists.test_index3c                 C   s@   t }tdd|}d}dD ] }|||}| |||| qd S )NTr   r   )r   ry   rW      )r   r   r   r   r   r   rC   r   r   r   r   r   test_removeX  s    
zTestLists.test_removec              	   C   sP   |    t}tdd|}| t}|dd W 5 Q R X | t|jd d S )NTr   r1   rJ   zlist.remove(x): x not in list)r   r   r   r   r   r   r   r   r   r   r   r   test_remove_error`  s    zTestLists.test_remove_errorc                 C   s<   t }tdd|}tdD ]}| |d||d| qd S )NTr   rW      )r   r   r4   r   r   r   r   r   
test_counth  s    zTestLists.test_countc                 C   s   |  t d S r   )r   rr   r   r   r   r   
test_clearn  s    zTestLists.test_clearc                 C   s   |  t d S r   )r   ru   r   r   r   r   	test_copyq  s    zTestLists.test_copyc                 C   sP   t dd|}ddddg}t||D ]$\}}|||}| |||| q&d S )NTr   r   r>   2   ,  r   )r   r   r   r   r   rC   r   r   r   r   	check_addt  s
    
zTestLists.check_addc                 C   s   |  t d S r   )r  r   r   r   r   r   test_add{  s    zTestLists.test_addc                 C   s*   t }tdd|}| }| | | d S NTr   )r   r   r   r   r   r   r   r   r   r   test_add_heterogeneous~  s    z TestLists.test_add_heterogeneousc                 C   s   |  t d S r   )r  r   r   r   r   r   test_add_inplace  s    zTestLists.test_add_inplacec                 C   s*   t }tdd|}| }| | | d S r  )r   r   r   r  r   r   r   test_add_inplace_heterogeneous  s    z(TestLists.test_add_inplace_heterogeneousc                 C   sB   t dd|}dD ]*}dD ] }|||}| |||| qqd S )NTr   )r   r>   r
  r  )ry   r-   r>   r   rR   ir   r   r  r   r   r   	check_mul  s
    
zTestLists.check_mulc                 C   s   |  t d S r   )r  r   r   r   r   r   test_mul  s    zTestLists.test_mulc                 C   s   |  t d S r   )r  r   r   r   r   r   	test_mul2  s    zTestLists.test_mul2c                 C   s   |  t d S r   )r  r   r   r   r   r   test_mul_inplace  s    zTestLists.test_mul_inplacel        z,need a 64-bit system to test for MemoryErrorc              	   C   s   |    t}tdd|}| t |dd W 5 Q R X tjdr`t	d}|
dd | t |dd	 W 5 Q R X d S )
NTr   ry   l           darwinz
libc.dylibz###Please ignore the above error message i.e. can't allocate region. It is in fact the purpose of this test to request more memory than can be provided###
zUTF-8l            )r   r   r   r   MemoryErrorsysplatform
startswithctCDLLZprintfencode)r   r   r   libcr   r   r   test_mul_error  s    
zTestLists.test_mul_errorc                 C   s8   t }tdd|}dD ]}||}| ||| qd S )NTr   )r   ry   r>   )r   r   r   )r   r   r   rC   r   r   r   r   	test_bool  s
    zTestLists.test_boolc                    s<   t dddd  t dd fdd}| |dd d S )	NTr   c                 S   s   t | | d fS NrR   r!   )lstr   r   r   inner  s    z*TestLists.test_list_passing.<locals>.innerc                    s   t t| } |S r   r@   rU   r%  r   r   outer  s    z*TestLists.test_list_passing.<locals>.outerrW   )rW   r   r  )r   r'  r   r&  r   test_list_passing  s
    
zTestLists.test_list_passingc                    sR    fdd}t dd |d |d |d |d |d	 |d
 d S )Nc                    s      |  |  d| f  d S )Nzmismatch for arguments %s)ZassertIsr   r   r   r   r   r   r     s    z#TestLists._test_compare.<locals>.eqTr   )ry   r-   r+  )ry   r-   r>   r+  )r+  r,  ))ry   r-   r   r,  ))      ?r         @r,  ))r-  r   g      @r,  r   )r   r   r   r   r*  r   _test_compare  s    zTestLists._test_comparec                 C   s   |  t d S r   )r0  r   r   r   r   r   test_eq  s    zTestLists.test_eqc                 C   s   |  t d S r   )r0  r   r   r   r   r   test_ne  s    zTestLists.test_nec                 C   s   |  t d S r   )r0  r   r   r   r   r   test_le  s    zTestLists.test_lec                 C   s   |  t d S r   )r0  r   r   r   r   r   test_lt  s    zTestLists.test_ltc                 C   s   |  t d S r   )r0  r   r   r   r   r   test_ge  s    zTestLists.test_gec                 C   s   |  t d S r   )r0  r   r   r   r   r   test_gt  s    zTestLists.test_gtc                 C   s*   t }tdd|}| |d|d d S )NTr   r>   )r   r   r   r   r   r   r   r   r   test_identity  s    zTestLists.test_identityc                 C   s&   t }tdd|}| | |  d S r  )r   r   r   r7  r   r   r   test_bool_list  s    zTestLists.test_bool_listN)T)C__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r  unittestZ
skipUnlessr  maxsizer!  r"  r(  r0  r1  r2  r3  r4  r5  r6  r8  r9  r   r   r   r   r     s~   
			


	


r   c                   @   sN   e Zd ZdZejdd Zdd Zdd Zdd	 Z	d
d Z
dd Zdd ZdS )TestUnboxingz@
    Test unboxing of Python lists into native Numba lists.
    c              	   c   s:   |  t}d V  W 5 Q R X |d k	r6| t|j| d S r   )r   	TypeErrorZassertRegexpMatchesr   r   )r   msgr   r   r   r   assert_type_error  s    zTestUnboxing.assert_type_errorc                    s"   t dd  fdd}|S )NTr   c                    s    | } | } || d S r   )r   )r   r   r   r*  r   r   check  s    z'TestUnboxing.check_unary.<locals>.checkr/  )r   r   rC  r   r*  r   check_unary  s    zTestUnboxing.check_unaryc                 C   s&   |  t}|ddg |ddg d S )Nry   r-                 ?y              @)rD  r    r   rC  r   r   r   test_numbers  s    
zTestUnboxing.test_numbersc                 C   s4   |  t}|ddg |ddg |dddg d S )Nr+  )r>   r   )ry                  @)r>   y              @r   )rD  r#   rF  r   r   r   test_tuples  s    
zTestUnboxing.test_tuplesc                 C   s    |  t}|ddddgf d S Nry   r-   r>   r   )rD  r%   rF  r   r   r   test_list_inside_tuple  s    
z#TestUnboxing.test_list_inside_tuplec                 C   s   |  t}|dddgf d S )Nry   r,   )r>   )rD  r&   rF  r   r   r    test_list_of_tuples_inside_tuple  s    
z-TestUnboxing.test_list_of_tuples_inside_tuplec              	   C   s  d}t }tdd|}ddg}| | || W 5 Q R X | |ddg | | |ddg W 5 Q R X | | |dddgf W 5 Q R X | | |tdddg W 5 Q R X ddg}| t}|| W 5 Q R X d	}| t|j|	t
j d S )
Nzcan't unbox heterogeneous listTr   ry   g      @rH  ry   )r-   r>   zFcan't unbox heterogeneous list: UniTuple({0} x 1) != UniTuple({0} x 2))r   r   rB  r   r   r   r@  r   r   formatr   intp)r   rA  r   r   r$  r   r   r   r   test_errors  s$    zTestUnboxing.test_errorsN)r:  r;  r<  __doc__
contextlibcontextmanagerrB  rD  rG  rI  rK  rL  rP  r   r   r   r   r?    s   
r?  c                   @   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S )TestListReflectionzG
    Test reflection of native Numba lists on Python list objects.
    c           
   
   C   s   t dd|}ddddgdgfddddgdd	d
ddgfg}|D ]|\}}t|}t|}|||}| ||H |||}	| |	| | || | |d |k|	d |k ~~	W 5 Q R X q>d S )NTr   r-  r   r.  r           g      @g      @g      @g       @g      "@r   )r   rA   assertRefCountr   r   )
r   r   r   Zsamplesdestsrcr   r   ZpyresZcresr   r   r   check_reflection7  s    

z#TestListReflection.check_reflectionc                 C   s   |  t d S r   )rY  r   r   r   r   r   test_reflect_simpleG  s    z&TestListReflection.test_reflect_simplec                 C   s   |  t d S r   )rY  r   r   r   r   r   test_reflect_conditionalJ  s    z+TestListReflection.test_reflect_conditionalc              
   C   sh   t }tdd|}dddg}| |8 | t || W 5 Q R X | |ddddg W 5 Q R X dS )ze
        When the function exits with an exception, lists should still be
        reflected.
        Tr   ry   r-   r>   rJ   N)r   r   rV  r   r   r   )r   r   r   rM   r   r   r   test_reflect_exceptionM  s    
z)TestListReflection.test_reflect_exceptionc                 C   sp   t }tdd|}dddg}|dd }|||}|||}| || | || | t|t| dS )zg
        When the same list object is reflected twice, behaviour should
        be consistent.
        Tr   ry   r-   r>   N)r   r   r   r  getrefcount)r   r   r   ZpylistZclistr   r   r   r   r   test_reflect_same_listZ  s    


z)TestListReflection.test_reflect_same_listc                 C   sD   t ddt}dg}dd |D }|| | dd |D | dS )zP
        When the list wasn't mutated, no reflection should take place.
        Tr   y              )@c                 S   s   g | ]}t |qS r   idr.   r   r   r   r0   p  s     z9TestListReflection.test_reflect_clean.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   r_  r.   r   r   r   r0   r  s     N)r   r   r   )r   r   rM   idsr   r   r   test_reflect_cleani  s
    z%TestListReflection.test_reflect_cleanN)
r:  r;  r<  rQ  rY  rZ  r[  r\  r^  rb  r   r   r   r   rT  2  s   rT  c                   @   s   e Zd Zdd ZdS )ManagedListTestCasec                 C   s8   |  t|t| t||D ]\}}| || qd S r   )r   r"   zipr   )r   expectr   r   r   r   r   r   !assert_list_element_precise_equalw  s    z5ManagedListTestCase.assert_list_element_precise_equalN)r:  r;  r<  rf  r   r   r   r   rc  u  s   rc  c                   @   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dd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!TestListManagedElementsz,Test list containing objects that need refctc                 C   sd   t dd|}tdtjtdtjg}t|}|| t|}|| | j||d d S )NTr   r>   rW   re  r   )r   r   arangeastyperO  rA   rf  )r   r   r   conre  r   r   r   r   _check_element_equal  s    $ z,TestListManagedElements._check_element_equalc                 C   s   dd }|  | d S )Nc                 S   s   d S r   r   rk  r   r   r   r     s    z=TestListManagedElements.test_reflect_passthru.<locals>.pyfuncrl  r   r   r   r   r   test_reflect_passthru  s    z-TestListManagedElements.test_reflect_passthruc                 C   s   dd }|  | d S )Nc                 S   s   |  tdtj d S )Nr1   )rG   r   ri  rj  rO  rm  r   r   r   r     s    z=TestListManagedElements.test_reflect_appended.<locals>.pyfuncrn  ro  r   r   r   test_reflect_appended  s    z-TestListManagedElements.test_reflect_appendedc                 C   s   dd }|  | d S )Nc                 S   s   t d| d< d S )Nr1   ry   r   ri  rm  r   r   r   r     s    z<TestListManagedElements.test_reflect_setitem.<locals>.pyfuncrn  ro  r   r   r   test_reflect_setitem  s    z,TestListManagedElements.test_reflect_setitemc                 C   s   dd }|  | d S )Nc                 S   s   |    d S r   rZ   rm  r   r   r   r     s    z;TestListManagedElements.test_reflect_popped.<locals>.pyfuncrn  ro  r   r   r   test_reflect_popped  s    z+TestListManagedElements.test_reflect_poppedc                 C   s   dd }|  | dS )zQmake sure list.insert() doesn't crash for refcounted objects (see #7553)
        c                 S   s   |  dtdtj d S )Nry   r   )r   r   ri  rj  rO  rm  r   r   r   r     s    z;TestListManagedElements.test_reflect_insert.<locals>.pyfuncNrn  ro  r   r   r   test_reflect_insert  s    z+TestListManagedElements.test_reflect_insertc                 C   s4   dd }t dd|}| }| }| j||d d S )Nc                  S   s.   g } t dD ]}| t|tj q| S )Nr  )r4   rG   r   ri  rj  rO  rk  rN   r   r   r   r     s    z3TestListManagedElements.test_append.<locals>.pyfuncTr   rh  r   rf  r   r   r   re  r   r   r   r   r     s     z#TestListManagedElements.test_appendc                 C   s2   dd }t dd|}| }| }| || d S )Nc                  S   sJ   g } t dD ]}| t| qd}| D ]}|| d|j  7 }q*|S )Nr  rU  ry   )r4   rG   r   ri  r3   size)rk  rN   r*   Zarrr   r   r   r     s    z9TestListManagedElements.test_append_noret.<locals>.pyfuncTr   r   r   ry  r   r   r   test_append_noret  s
    	z)TestListManagedElements.test_append_noretc                 C   s4   dd }t dd|}| }| }| j||d d S )Nc                  S   s4   g } t dD ]}| td qtd| d< | S )NrW   r-   r   r   r4   rG   r   ri  rw  r   r   r   r     s
    z;TestListManagedElements.test_reassign_refct.<locals>.pyfuncTr   rh  rx  ry  r   r   r   test_reassign_refct  s     z+TestListManagedElements.test_reassign_refctc                 C   s4   dd }t dd|}| }| }| j||d d S )Nc                  S   s.   g } t dD ]}| td q| dd S )NrW   r-   r   r}  rw  r   r   r   r     s    z6TestListManagedElements.test_get_slice.<locals>.pyfuncTr   rh  rx  ry  r   r   r   test_get_slice  s     z&TestListManagedElements.test_get_slicec                 C   s4   dd }t dd|}| }| }| j||d d S )Nc                  S   s:   g } t dD ]}| td q| dd | dd< | S )NrW   r-   r   ry   r>   r}  rw  r   r   r   r     s
    z6TestListManagedElements.test_set_slice.<locals>.pyfuncTr   rh  rx  ry  r   r   r   test_set_slice  s     z&TestListManagedElements.test_set_slicec                 C   s4   dd }t dd|}| }| }| j||d d S )Nc                  S   s@   g } t dD ]}| t|d  qt| dkr<|   q&| S )N   ry   r-   r4   rG   r   ri  r"   rZ   rw  r   r   r   r     s    
z0TestListManagedElements.test_pop.<locals>.pyfuncTr   rh  rx  ry  r   r   r   test_pop  s     z TestListManagedElements.test_popc                 C   s4   dd }t dd|}| }| }| j||d d S )Nc                  S   sB   g } t dD ]}| t|d  qt| dkr>| d q&| S )Ni  ry   r-   r  rw  r   r   r   r     s    z4TestListManagedElements.test_pop_loc.<locals>.pyfuncTr   rh  rx  ry  r   r   r   test_pop_loc  s     z$TestListManagedElements.test_pop_locc                 C   s4   dd }t dd|}| }| }| j||d d S )Nc                  S   s4   g } t dD ]}| t|d  q| dd= | S )Nr  ry   r>   r1   r}  rw  r   r   r   r     s
    
z6TestListManagedElements.test_del_range.<locals>.pyfuncTr   rh  rx  ry  r   r   r   test_del_range  s     z&TestListManagedElements.test_del_rangec                 C   s2   dd }t dd|}| }| }| || d S )Nc                  S   s&   g } t dD ]}| dg|  q| S Nr1   r   )r4   rG   rw  r   r   r   r   -  s    z9TestListManagedElements.test_list_of_list.<locals>.pyfuncTr   r{  ry  r   r   r   test_list_of_list,  s
    z)TestListManagedElements.test_list_of_listN)r:  r;  r<  rQ  rl  rp  rq  rs  ru  rv  r   r|  r~  r  r  r  r  r  r  r   r   r   r   rg  }  s    	rg  c                    s    fdd}|S )Nc              	      sH   |    | t} | f|| W 5 Q R X d}| |t|j d S )Nz-cannot reflect element of reflected container)r   r   r@  r   r   r   )r   r   kwargsr   Z
expect_msgfnr   r   wrapped<  s
    z*expect_reflection_failure.<locals>.wrappedr   )r  r  r   r  r   expect_reflection_failure;  s    r  c                   @   s   e Zd Zdd Zdd Zedd Zedd Zed	d
 Zedd Z	dd Z
dd Zdd Zedd Zdd Zedd Zdd Zdd Zedd Zedd  Zd!d" Zd#S )$TestListOfListc           	      G   sZ   ddl m} ||}|| }||}tdd|}|| }| j||d | j||d d S )Nr   )deepcopyTr   rh  )rs   r  r   rf  )	r   r   r   r  Zexpect_argsre  Z	njit_argsr   r   r   r   r   compile_and_testH  s      zTestListOfList.compile_and_testc                 C   s   dd }|  | d S )Nc                  S   s   dd t dD } | S )Nc                 S   s   g | ]}t |gqS r   rr  r/   rN   r   r   r   r0   [  s     zNTestListOfList.test_returning_list_of_list.<locals>.pyfunc.<locals>.<listcomp>r   r;   )r   r   r   r   r   Z  s    z:TestListOfList.test_returning_list_of_list.<locals>.pyfuncr  ro  r   r   r   test_returning_list_of_listY  s    z*TestListOfList.test_returning_list_of_listc              	   C   s<  dd }t dd|}dd tdD dd tdD g}d	d tdD d
gg}dgdhgg}dgddigg}|| | t}|| W 5 Q R X | dt|j | t}|| W 5 Q R X | dt|j | t}|| W 5 Q R X | dt|j | t}|| W 5 Q R X | dt|j d S )Nc                 S   s   | d S Nry   r   r   r   r   r   r   b  s    z<TestListOfList.test_heterogeneous_list_error.<locals>.pyfuncTr   c                 S   s   g | ]}t |qS r   r   zerosr  r   r   r   r0   f  s     z@TestListOfList.test_heterogeneous_list_error.<locals>.<listcomp>rW   c                 S   s   g | ]}t |d  qS rE  r   Zonesr  r   r   r   r0   g  s     c                 S   s   g | ]}t |qS r   r  r  r   r   r   r0   h  s     rM  ry   r   Qreflected list(array(float64, 1d, C)) != reflected list(array(complex128, 1d, C))zDreflected list(array(float64, 1d, C)) != reflected list((int64 x 1))z=reflected list(int64) != reflected list(reflected set(int64))z*Cannot type list element of <class 'dict'>)r   r4   r   r@  r   r   r   r   )r   r   r   l2l3l4l5r   r   r   r   test_heterogeneous_list_error`  sB    z,TestListOfList.test_heterogeneous_list_errorc                 C   sn   dd }t dd|}ddgddgg}d	d
g}t|t|f}t|t|f}||  ||  | || d S )Nc                 S   s   |  | | d  d d S )NrR   {   r   )l1r  r   r   r   r     s    
z:TestListOfList.test_list_of_list_reflected.<locals>.pyfuncTr   r   ry   r-   r>   r   rW   )r   rA   r   )r   r   r   r  r  re  r   r   r   r   test_list_of_list_reflected  s    z*TestListOfList.test_list_of_list_reflectedc                 C   sV   dd }dd t dD dd t dD g}tdd|}||}| ||| d S )	Nc                 S   s   | d S r  r   r   r   r   r   r     s    z6TestListOfList.test_heterogeneous_list.<locals>.pyfuncc                 S   s   g | ]}t |qS r   r  r  r   r   r   r0     s     z:TestListOfList.test_heterogeneous_list.<locals>.<listcomp>rW   c                 S   s   g | ]}t |qS r   r  r  r   r   r   r0     s     Tr   )r4   r   r   )r   r   r  r   Zl1_gotr   r   r   test_heterogeneous_list  s
    $z&TestListOfList.test_heterogeneous_listc              	   C   sh   dd }t dgt dd gg}| || | t}| || W 5 Q R X | dt|j d S )Nc                 S   s   |   S r   rt  r   r   r   r   bar  s    z$TestListOfList.test_c01.<locals>.barr   r1   rE  r  )r   r  r  r   r@  r   r   r   r   r  rr   r   r   r   test_c01  s    zTestListOfList.test_c01c              	   C   sP   dd }t dgg}| tj}| || W 5 Q R X | dt|j d S )Nc                 S   s   |  |  | S r   r   r   r   r   r   r    s    
z$TestListOfList.test_c02.<locals>.barr   z(Invalid use of BoundFunction(list.append)	r   r  r   r   r   r  r   r   r   r  r   r   r   test_c02  s    zTestListOfList.test_c02c              	   C   sd   dd }t dgg}| tj}| || W 5 Q R X | dtdt|d t	|j
 d S )Nc                 S   s   | }d|d< |S Nry   r   r   r   fr   r   r   r    s    z$TestListOfList.test_c03.<locals>.barr>   1invalid setitem with value of {} to element of {}ry   r   r   ri  r   r   r   r  r   rN  r   r   r   r  r   r   r   test_c03  s    
zTestListOfList.test_c03c              	   C   sh   dd }t dgg}| tj}| || W 5 Q R X | dtdt|d d t	|j
 d S )Nc                 S   s   | }d|d d< |S r  r   r  r   r   r   r    s    z$TestListOfList.test_c04.<locals>.barr>   r  r1   r   r  r  r   r   r   test_c04  s    zTestListOfList.test_c04c                 C   s.   dd }t dt jgg}| || d S )Nc                 S   s2   | }t dd t dt jD |d d< |S )Nc                 S   s   g | ]}|qS r   r   r.   r   r   r   r0     s     z8TestListOfList.test_c05.<locals>.bar.<locals>.<listcomp>r1   r   )r   r   ri  rj  rO  r  r   r   r   r    s    *z$TestListOfList.test_c05.<locals>.barr>   )r   ri  rj  rO  r  r   r  r  r   r   r   test_c05  s    zTestListOfList.test_c05c              	   C   sP   dd }t dgg}| tj}| || W 5 Q R X | dt|j d S )Nc                 S   s*   | }t dd t dD |d d< |S )Nc                 S   s   g | ]}|d  qS r  r   r.   r   r   r   r0     s     z8TestListOfList.test_c06.<locals>.bar.<locals>.<listcomp>r1   r   )r   r   ri  r  r   r   r   r    s    "z$TestListOfList.test_c06.<locals>.barr>   invalid setitem with value)	r   ri  r   r   r   r  r   r   r   r  r   r   r   test_c06  s
    zTestListOfList.test_c06c              	   C   s`   |    dd }tdgg}tdd|}| t}|| W 5 Q R X | dt|j d S )Nc                 S   s   | d S )Nir   r   r   r   r   r    s    z$TestListOfList.test_c07.<locals>.barr>   Tr   zgetitem out of range)	r   r   ri  r   r   r   r   r   r   r   r  r  r   r   r   r   r   test_c07  s    zTestListOfList.test_c07c              	   C   s\   |    dd }dddg}tdd|}| t}|| W 5 Q R X | dt|j d S )	Nc                 S   s   d| d< | S )Nr   rW   r   r   r   r   r   r    s    z$TestListOfList.test_c08.<locals>.barry   r-   r>   Tr   zsetitem out of range)r   r   r   r   r   r   r   r  r   r   r   test_c08  s    
zTestListOfList.test_c08c              	   C   sL   dd }dddg}|  tj}| || W 5 Q R X | dt|j d S )Nc                 S   s   d| d< | S )Ny              @r   r   r   r   r   r   r    s    z$TestListOfList.test_c09.<locals>.barry   r-   r>   r  )r   r   r   r  r   r   r   r  r   r   r   test_c09  s
    
zTestListOfList.test_c09c                 C   s,   dd }dddgdddgg}|  || d S )	Nc                 S   s   | d | d  | d< | d< | S r  r   r   r   r   r   r  )  s    z$TestListOfList.test_c10.<locals>.barry   r-   r>   r   rW   r   r  r  r   r   r   test_c10'  s    zTestListOfList.test_c10c                 C   s,   dd }dddgdddgg}|  || d S )	Nc                 S   s   | d d d | d d < | S r#  r   r   r   r   r   r  2  s    z$TestListOfList.test_c11.<locals>.barry   r-   r>   r   rW   r   r  r  r   r   r   test_c110  s    zTestListOfList.test_c11c                 C   s*   dd }dd t dD }| || d S )Nc                 S   s
   | d= | S r#  r   r   r   r   r   r  :  s    z$TestListOfList.test_c12.<locals>.barc                 S   s   g | ]}|qS r   r   r.   r   r   r   r0   >  s     z+TestListOfList.test_c12.<locals>.<listcomp>r1   )r4   r  r  r   r   r   test_c129  s    zTestListOfList.test_c12N)r:  r;  r<  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  F  s2   
0




	



r  c                   @   s   e Zd Zdd ZdS )Itemc                 C   s   || _ || _d S r   manyscalar)r   r  r  r   r   r   __init__C  s    zItem.__init__N)r:  r;  r<  r  r   r   r   r   r  B  s   r  c                   @   s   e Zd Zdd Zdd ZdS )	Containerc                 C   s   dd t |D | _d S )Nc                 S   s    g | ]}t |t jgqS r   )r   ri  rj  float64r  r   r   r   r0   J  s     z&Container.__init__.<locals>.<listcomp>)r4   data)r   rC   r   r   r   r  I  s    zContainer.__init__c                 C   s.   t |D ] }| jt|tjg qd S r   )r4   r  rG   r   ri  rj  r  )r   rC   rN   r   r   r   moreL  s    zContainer.moreN)r:  r;  r<  r  r  r   r   r   r   r  H  s   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestListAndJitClassesc                 C   s,   dt jd d  fdt jfg}t|t}|S )Nr  r  )r   r  r   r  )r   specJCItemr   r   r   make_jitclass_elementR  s
    z+TestListAndJitClasses.make_jitclass_elementc                 C   s2   dt jt t jd d d di}t|t}|S )Nr  ry   )dtype)r   Listr  r   r  )r   r  JCContainerr   r   r   make_jitclass_containerZ  s
     z-TestListAndJitClasses.make_jitclass_containerc                 C   s"   t ||D ]\}}||| q
d S r   )rd  )r   testerre  r   r   r'   r   r   r   assert_list_element_with_testera  s    z5TestListAndJitClasses.assert_list_element_with_testerc           	         s      dd }fdd}tdd|} fddtd	D }t|}t|}||}||}||| ||| d S )
Nc                 S   s   | d | d  | d< | d< | S rx   r   )xsr   r   r   r   h  s    zETestListAndJitClasses.test_jitclass_instance_elements.<locals>.pyfuncc                    s$     | j|j   | j|j d S r   )r   r  r  )r   r'   r   r   r   r   l  s    zATestListAndJitClasses.test_jitclass_instance_elements.<locals>.eqTr   c                    s(   g | ] } t j|d  |d dqS )ry   g333333?r  )r   random)r/   rC   )r  r   r   r0   r  s   zITestListAndJitClasses.test_jitclass_instance_elements.<locals>.<listcomp>rW   )r  r   r4   rA   r  )	r   r   r   r   r   Z
expect_argZgot_argZ
expect_resZgot_resr   )r  r   r   test_jitclass_instance_elementse  s    
z5TestListAndJitClasses.test_jitclass_instance_elementsc                 C   sT   |   }tdd}|dd}| |j|j |d |d | |j|j d S )Nr   rB   r>   )r  r  rf  r  r  )r   r  re  r   r   r   r   test_jitclass_containing_list~  s    



z3TestListAndJitClasses.test_jitclass_containing_listN)r:  r;  r<  r  r  r  r  r  r   r   r   r   r  Q  s
   r  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestListInitialValuesz5Tests that lists carry their initial value if presentc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r   r   r   r   r   r   r    s    z?TestListInitialValues.test_homogeneous_and_literal.<locals>.barc                    sR   | j d krdd S  t| tj  | j dddg  t| dd dd S )	Nc                 S   s   t | S r   r	   r   r   r   r   <lambda>      zTTestListInitialValues.test_homogeneous_and_literal.<locals>.ol_bar.<locals>.<lambda>ry   r-   r>   literal_valueFc                 S   s   | S r   r   r   r   r   r   r    r  )initial_value
assertTrue
isinstancer   r  r   hasattrr   r   r   r   ol_bar  s    
zBTestListInitialValues.test_homogeneous_and_literal.<locals>.ol_barc                     s   dddg}  |  d S r   r   r   r  r   r   foo  s    
z?TestListInitialValues.test_homogeneous_and_literal.<locals>.foor   r   r   r  r  r   r  r   r   test_homogeneous_and_literal  s    z2TestListInitialValues.test_homogeneous_and_literalc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r   r   r   r   r   r   r    s    zQTestListInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.barc                    s:     t| tj  | jd   t| dd dd S )Nr  Fc                 S   s   | S r   r   r   r   r   r   r    r  zfTestListInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.ol_bar.<locals>.<lambda>)r  r  r   r  r   r  r  r   r   r   r   r    s    zTTestListInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.ol_barc                     s   dddg}  |  d S )NrE  r-   r>   r   r   r  r   r   r    s    
zQTestListInitialValues.test_heterogeneous_but_castable_to_homogeneous.<locals>.foor  r  r   r  r   .test_heterogeneous_but_castable_to_homogeneous  s    zDTestListInitialValues.test_heterogeneous_but_castable_to_homogeneousc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r   r   r   r   r   r   r    s    z<TestListInitialValues.test_mutation_not_carried.<locals>.barc                    s@   | j d krdd S  t| tj  | j dddg dd S )Nc                 S   s   t | S r   r  r  r   r   r   r    r  zQTestListInitialValues.test_mutation_not_carried.<locals>.ol_bar.<locals>.<lambda>ry   r-   r>   c                 S   s   | S r   r   r  r   r   r   r    r  )r  r  r  r   r  r   r  r   r   r   r    s
    
z?TestListInitialValues.test_mutation_not_carried.<locals>.ol_barc                     s    dddg} |  d  |  d S rJ  r   r   r  r   r   r    s    

z<TestListInitialValues.test_mutation_not_carried.<locals>.foor  r  r   r  r   test_mutation_not_carried  s    z/TestListInitialValues.test_mutation_not_carriedc                    s   t dd }|d ftdddgffD ]d\}t dd dd	  t fd
d}t  fdd}|  jd d }| |j| q"d S )Nc                  W   s   d S r   r   r)  r   r   r   nop  s    zLTestListInitialValues.test_mutation_not_carried_single_function.<locals>.nopry   r-   r>   c                 S   s   d S r   r   r   r   r   r   baz  s    zLTestListInitialValues.test_mutation_not_carried_single_function.<locals>.bazc                 S   s   d S r   r   r(   r   r   r   r    s    zLTestListInitialValues.test_mutation_not_carried_single_function.<locals>.barc                    s    fdd}|S )Nc                    s   |   |  d S r   r   r  r  r  r   r   impl  s    z]TestListInitialValues.test_mutation_not_carried_single_function.<locals>.ol_bar.<locals>.implr   )r(   r  r  r   r   r    s    zOTestListInitialValues.test_mutation_not_carried_single_function.<locals>.ol_barc                     s    dddg}  |  |  d | S r   r   r   r  r   r   r    s    

zLTestListInitialValues.test_mutation_not_carried_single_function.<locals>.foor   )r   r	   r   
signaturesr   r  )r   r  Zivr  r  largr   )r  r  r  r   )test_mutation_not_carried_single_function  s    

z?TestListInitialValues.test_mutation_not_carried_single_functionc                    sR   t dd  t  fdd}|   jd d }| |jd  | |jjd  d S )Nc                 S   s   d S r   r   r   r   r   r   r    s    z9TestListInitialValues.test_list_of_list_ctor.<locals>.barc                     s(   dddddgdddddgg}  |  d S r   r   r   r  r   r   r    s    z9TestListInitialValues.test_list_of_list_ctor.<locals>.foor   )r   r  r   r  r  )r   r  r  r   r  r   test_list_of_list_ctor  s    
z,TestListInitialValues.test_list_of_list_ctorN)	r:  r;  r<  rQ  r  r  r  r  r  r   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!S )"TestLiteralListsc                 C   s   t dd }|  d S )Nc                  S   s   ddg} d S )Nry   r   r   r   r   r   r   r    s    z0TestLiteralLists.test_basic_compile.<locals>.foo)r   r   r  r   r   r   test_basic_compile  s    
z#TestLiteralLists.test_basic_compilec                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r   r   r   r   r   r   r    s    z<TestLiteralLists.test_literal_value_passthrough.<locals>.barc              	      s     t| tj | j}  t|t  |d td  |d td  |d ttj	dd  |d tj
tjddddgd   t|d	 tj  |d	 jd td
  |d	 jd td dd S )Nr   ry   r   r-   Cr>   F)	reflectedr  r   catr1   c                 S   s   | S r   r   r   r   r   r   r    r  zQTestLiteralLists.test_literal_value_passthrough.<locals>.ol_bar.<locals>.<lambda>)r  r  r   LiteralListr  rA   r   literalArrayr  r  rO  )r   lvr   r   r   r    s    z?TestLiteralLists.test_literal_value_passthrough.<locals>.ol_barc                     s6   dddg} ddg}t d}dd|| |g} | d S )Nry   r-   r>   r  r1   rW   r   r  )ZotherhomogeneouslistZotherheterogeneouslistr  rM   r  r   r   r    s
    

z<TestLiteralLists.test_literal_value_passthrough.<locals>.foor  r  r   r  r   test_literal_value_passthrough
  s    z/TestLiteralLists.test_literal_value_passthroughc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r   r   r   r   r   r   r  *  s    zETestLiteralLists.test_literal_value_involved_passthrough.<locals>.barc              
      s    t| tj | j}tdtdtdttjddi}t|}tdttdtdtj	tj
tjddid|gtd	td
tdtjtjddi} fdd  || dd S )NghrN   ry   r  r   r  )r  r   r-   r*   F)r  c                    s,  t | tjr@t |tjr@t| j|jD ]\}} | j|j q&nt | trtt |trtt| |D ]\}} || q^nt | tjrt |tjrt| j |j D ]$\\}}\}} ||  || qn^t | trt |trt|  | D ]$\\}}\}} ||  || qn	| | d S r   )
r  r   r  rd  r  rA   LiteralStrKeyDictitemsdictr   )r   r   rN   jZkiviZkjZvj)
check_samer   r   r   r  @  s2    




"
z\TestLiteralLists.test_literal_value_involved_passthrough.<locals>.ol_bar.<locals>.check_samec                 S   s   | S r   r   r   r   r   r   r  W  r  zZTestLiteralLists.test_literal_value_involved_passthrough.<locals>.ol_bar.<locals>.<lambda>)r  r  r   r  r  r  r  r  r  ZDictTypeZunicode_typerO  r  Z
complex128)r   ZdlvZinner_literalZ
inner_dictZouter_literalr   )r  r   r  -  s6    
  
zHTestLiteralLists.test_literal_value_involved_passthrough.<locals>.ol_barc                     s6   ddddidt ddgddd	d
gd}  |  d S )Nry   r   r  r  rW   )r  rN   r-   rE  rH                @)r   r   r*   r  r   r  r   r   r  Y  s    zETestLiteralLists.test_literal_value_involved_passthrough.<locals>.foor  r  r   r  r   'test_literal_value_involved_passthrough(  s    +z8TestLiteralLists.test_literal_value_involved_passthroughc                 C   s   dd }dd }dd }dd }d	d
 }dd }dd }dd }dd }	dd }
|||||||||	|
f
}|D ]T}|  |j> | tj}t|  W 5 Q R X d}| |t|j W 5 Q R X qld S )Nc                  S   s   ddg} d| d< d S )Nr   ry   r   r   r   r   r   r   r   staticsetitemf  s    z=TestLiteralLists.test_mutation_failure.<locals>.staticsetitemc                  S   s   ddg} | d= d S Nr   ry   r   r   r   r   r   r   delitemj  s    z7TestLiteralLists.test_mutation_failure.<locals>.delitemc                  S   s   ddg} |  d d S )Nr   ry   rH  r   r   r   r   r   rG   n  s    z6TestLiteralLists.test_mutation_failure.<locals>.appendc                  S   s   ddg} |  ddg d S )Nr   ry   rH  r  )rT   r   r   r   r   rT   r  s    z6TestLiteralLists.test_mutation_failure.<locals>.extendc                  S   s   ddg} |  dd d S )Nr   ry   r   rH  )r   r   r   r   r   r   v  s    z6TestLiteralLists.test_mutation_failure.<locals>.insertc                  S   s   ddg} |  d d S Nr   ry   )r   r   r   r   r   r   z  s    z6TestLiteralLists.test_mutation_failure.<locals>.removec                  S   s   ddg} |    d S r  rt  r   r   r   r   rZ   ~  s    z3TestLiteralLists.test_mutation_failure.<locals>.popc                  S   s   ddg} |    d S r  )rq   r   r   r   r   rq     s    z5TestLiteralLists.test_mutation_failure.<locals>.clearc                  S   s   ddg} |    d S r  )sortr   r   r   r   r    s    z4TestLiteralLists.test_mutation_failure.<locals>.sortc                  S   s   ddg} |    d S r  )r   r   r   r   r   r     s    z7TestLiteralLists.test_mutation_failure.<locals>.reverseCannot mutate a literal list)	ZsubTestr:  r   r   r   r   r   r   r   )r   r  r  rG   rT   r   r   rZ   rq   r  r   Zillegalstestr   re  r   r   r   test_mutation_failured  s*      z&TestLiteralLists.test_mutation_failurec                 C   s"   t dd }| | |  d S )Nc                  S   s<   dddddddddddg} g }d	D ]}| | | q"|S )
Nr   ry   r-   r>   r   r   rW   r*   abc)rG   r   rM   r  r   r   r   r   r    s
    z(TestLiteralLists.test_count.<locals>.foor   r   Zpy_funcr  r   r   r   r    s    
zTestLiteralLists.test_countc                 C   s"   t dd }| | |  d S )Nc                  S   s"   dddddddddddg} t | S )	Nr   ry   r-   r>   r   r   rW   r*   r!   r   r   r   r   r    s    z&TestLiteralLists.test_len.<locals>.foor  r  r   r   r   r     s    
zTestLiteralLists.test_lenc                 C   s"   t dd }| | |  d S )Nc                  S   s>   dddddddddddg} g }t d	D ]}||| k q&|S )
Nr   ry   r-   r>   r   r   rW   r*   )r   r   r-   r   )r   rG   r
  r   r   r   r    s
    z+TestLiteralLists.test_contains.<locals>.foor  r  r   r   r   r     s    
zTestLiteralLists.test_containsc              	   C   sF   t dd }| tj}|d W 5 Q R X d}| |t|j d S )Nc                 S   s   ddg}||  S r  r   r   rM   r   r   r   r    s    z*TestLiteralLists.test_getitem.<locals>.foor   $Cannot __getitem__ on a literal listr   r   r   r   r   r   r   r   r  r   re  r   r   r   r     s    
zTestLiteralLists.test_getitemc                 C   s"   t dd }| | |  d S )Nc                  S   s   ddg} | d | d fS r  r   r   r   r   r   r    s    z0TestLiteralLists.test_staticgetitem.<locals>.foor  r  r   r   r   test_staticgetitem  s    
z#TestLiteralLists.test_staticgetitemc              	   C   sD   t dd }| tj}|  W 5 Q R X d}| |t|j d S )Nc                  S   s   dddg} | d d S )Nr   r   ry   r-   r   r   r   r   r   r    s    
z6TestLiteralLists.test_staticgetitem_slice.<locals>.foor  r  r  r   r   r   test_staticgetitem_slice  s    
z)TestLiteralLists.test_staticgetitem_slicec              	   C   sF   t dd }| tj}|d W 5 Q R X d}| |t|j d S )Nc                 S   s   ddg}d|| < d S )Nr   ry   r   r   r  r   r   r   r    s    z*TestLiteralLists.test_setitem.<locals>.foor   r  r  r  r   r   r   r     s    
zTestLiteralLists.test_setitemc                 C   s0   t dd }dD ]}| |||| qd S )Nc                 S   s&   | d dkrddg}nddg}|d S )Nry   r>   r   r   r-   r   r   r  r   r   r   r    s    
z(TestLiteralLists.test_unify.<locals>.foo)iri   r  )r   r  r   r   r   r   
test_unify  s    
zTestLiteralLists.test_unifyc              	   C   sF   t dd }| tj}|d W 5 Q R X d}| |t|j d S )Nc                 S   s<   | d dkrdddg}nddg}|d |d |d |d fS )Nry   r>   r   rH  r   r-   r   r   r  r   r   r   r    s    z,TestLiteralLists.test_not_unify.<locals>.foori   zCannot unify LiteralListr  r  r   r   r   test_not_unify  s    
zTestLiteralLists.test_not_unifyc              	   C   sD   t dd }| tj}|  W 5 Q R X d}| |t|j d S )Nc                  S   s   ddg} |  d d S r  )r}   r   r   r   r   r    s    z(TestLiteralLists.test_index.<locals>.fooz+list.index is unsupported for literal listsr  r  r   r   r   
test_index   s    
zTestLiteralLists.test_indexc                 C   s"   t dd }| | |  d S )Nc                  S   s   ddg  } | d | d fS r  )rs   r   r   r   r   r    s    z'TestLiteralLists.test_copy.<locals>.foor  r  r   r   r   r	    s    
zTestLiteralLists.test_copyc                    s6   dd  t  fdd}t fdd}|  d S )Nc                 S   s   d S r   r   r   r   r   r   r    s    z3TestLiteralLists.test_tuple_not_in_mro.<locals>.barc                    s,     t| tj  t| tj dd S )Nc                 S   s   dS )N.r   r   r   r   r   r    r  zHTestLiteralLists.test_tuple_not_in_mro.<locals>.ol_bar.<locals>.<lambda>)ZassertFalser  r   Z	BaseTupler  r  r   r   r   r   r    s    z6TestLiteralLists.test_tuple_not_in_mro.<locals>.ol_barc                     s   ddg}  |  d S r  r   r   r  r   r   r    s    z3TestLiteralLists.test_tuple_not_in_mro.<locals>.foor  r  r   r  r   test_tuple_not_in_mro  s    z&TestLiteralLists.test_tuple_not_in_mroN)r:  r;  r<  r  r  r   r  r  r   r   r   r  r  r   r  r  r  r	  r  r   r   r   r   r    s    <4	r  __main__)ucollectionsr   rR  r   r7   r  ctypesr  Znumpyr   Znumba.core.compilerr   r   Znumbar   r   r   r   r	   r=  r
   Z
numba.corer   r   r   Znumba.tests.supportr   r   r   Znumba.experimentalr   Znumba.core.extendingr   Zenable_pyobj_flagsZenable_pyobjectZforce_pyobj_flagsZforce_pyobjectr   r   r    r#   r%   r&   r)   r+   r5   r6   r9   r<   r=   r?   rD   rF   rH   rO   rQ   rV   rX   r[   r\   r^   r`   ra   re   rg   rj   rk   rm   rn   ro   rp   rr   ru   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r?  rT  rc  rg  r  r  objectr  r  r  r  r  r:  mainr   r   r   r   <module>   s   
		
	
	
  mDC ? }	8x  (
