U
    ,d$  ć                   @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ dd Zdd	 Zd
d Zdd ZG dd deeZedkre ”  dS )é    N)ŚjitŚtypeof)Śtypes)ŚTypingError)ŚMemoryLeakMixinŚTestCaseŚtagc                 C   s   | | S ©N© )ŚaŚbr
   r
   śC/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_fancy_indexing.pyŚgetitem_usecase   s    r   c                 C   s   || |< d S r	   r
   )r   Śidxr   r
   r
   r   Śsetitem_usecase   s    r   c                 C   s   t  | |”S r	   ©ŚnpZtake)ŚAŚindicesr
   r
   r   Śnp_take   s    r   c                 C   s   t j| ||dS )N©Śaxisr   )r   r   r   r
   r
   r   Śnp_take_kws   s    r   c                   @   s   e Zd Zd!ddZd"ddZd#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 S )%ŚTestFancyIndexingTc                 C   sH   t  d|d dg”g}|rD|t  dd|d g”t  ddddg”g7 }|S )Nr   é   éž’’’)r   Zint16Zuint16Zbool_)ŚselfŚNŚmanyŚchoicesr
   r
   r   Śgenerate_advanced_indices   s    ’z+TestFancyIndexing.generate_advanced_indicesc              	   c   s¤   |rVt dddt d|d dt dddt |d ddt | d ddt d| dg}nt d|d dt d| dg}t|d D ]}tj||dD ]
}|V  qqdS )zG
        Generate basic index tuples with 0 to *maxdim* items.
        Nr   r   é   r   é’’’’)Śrepeat)ŚsliceŚrangeŚ	itertoolsŚproduct)r   r   Śmaxdimr   r   ŚndimŚtupr
   r
   r   Śgenerate_basic_index_tuples!   s    

ū’z-TestFancyIndexing.generate_basic_index_tuplesc                 c   sj   t | j||d}t|d D ]F}|  ||d |”D ].}|D ]$}|d| |f ||d  V  q<q4qdS )z
        Generate advanced index tuples by generating basic index tuples
        and adding a single advanced index item.
        ©r   r   N)Ślistr    r%   r+   )r   r   r(   r   r   Śir*   Zadvr
   r
   r   Śgenerate_advanced_index_tuples8   s
    z0TestFancyIndexing.generate_advanced_index_tuplesc                 c   sN   |   |||”D ]:}tt|d D ]$}|d| tf ||d  V  q"qdS )zr
        Same as generate_advanced_index_tuples(), but also insert an
        ellipsis at various points.
        r   N)r/   r%   ŚlenŚEllipsis)r   r   r(   r   r*   r.   r
   r
   r   Ś,generate_advanced_index_tuples_with_ellipsisE   s    z>TestFancyIndexing.generate_advanced_index_tuples_with_ellipsisc           
      C   s    t }tdd|}| ” }|jp"|}|D ]r}|||}|j|k	sDt|||}	|  |	j|j” |  |	j|j” tj	 
|	|” |	jr(|	 d” tj	 
||” q(d S )NT©Znopythoné*   )r   r   ŚcopyŚbaseŚAssertionErrorŚassertEqualŚshapeŚdtyper   ŚtestingŚassert_equalŚsizeŚfill)
r   Śarrr   ŚpyfuncŚcfuncŚorigZ	orig_baseŚindexŚexpectedŚgotr
   r
   r   Ścheck_getitem_indicesN   s    



z'TestFancyIndexing.check_getitem_indicesc                 C   sF   d}d}t  || ” |f| ” t j”}|  ||”}|  ||” d S ©Né   é   )r   ŚarangeŚreshapeŚastypeŚint32r/   rF   ©r   r   r)   r?   r   r
   r
   r   Śtest_getitem_tupled   s
    "z$TestFancyIndexing.test_getitem_tuplec                 C   sJ   d}d}t  || ” |f| ” t j”}| j||dd}|  ||” d S ©NrH   rI   Fr,   )r   rJ   rK   rL   rM   r2   rF   rN   r
   r
   r   Śtest_getitem_tuple_and_ellipsism   s    "’z1TestFancyIndexing.test_getitem_tuple_and_ellipsisc                 C   s>   t dddd }t d”}||d |  |d |d ” d S )NTr3   c                 S   s   | d | d< d S )N).r   ).r   r
   )r?   Śvr
   r
   r   Śfooy   s    z7TestFancyIndexing.test_ellipsis_getsetitem.<locals>.foor!   r   r   )r   r   rJ   r8   )r   rS   r?   r
   r
   r   Śtest_ellipsis_getsetitemw   s
    


z*TestFancyIndexing.test_ellipsis_getsetitemc                 C   sD   d}d}t  || ” |f| ” t j”}|  |”}|  ||” d S rG   )r   rJ   rK   rL   rM   r    rF   rN   r
   r
   r   Śtest_getitem_array   s
    "
z$TestFancyIndexing.test_getitem_arrayc           	      C   s   t }tdd|}|D ]f}|| }t |”}t |”}|||| |||| |  |j|j” |  |j|j” tj ||” qd S )NTr3   )	r   r   r   Z
zeros_liker8   r9   r:   r;   r<   )	r   r?   r   r@   rA   rC   ŚsrcrD   rE   r
   r
   r   Ścheck_setitem_indices   s    

z'TestFancyIndexing.check_setitem_indicesc                 C   sF   d}d}t  || ” |f| ” t j”}|  ||”}|  ||” d S rG   )r   rJ   rK   rL   rM   r/   rW   rN   r
   r
   r   Śtest_setitem_tuple   s
    "z$TestFancyIndexing.test_setitem_tuplec                 C   sJ   d}d}t  || ” |f| ” t j”}| j||dd}|  ||” d S rP   )r   rJ   rK   rL   rM   r2   rW   rN   r
   r
   r   Śtest_setitem_tuple_and_ellipsis”   s    "’z1TestFancyIndexing.test_setitem_tuple_and_ellipsisc                 C   sH   d}d}t  || ” |f| ” t j”d }|  |”}|  ||” d S )NrH   rI   é
   )r   rJ   rK   rL   rM   r    rW   rN   r
   r
   r   Śtest_setitem_array«   s
    &
z$TestFancyIndexing.test_setitem_arrayc                 C   s  t }tdd|}t d”t d”ft d”t d”ftjdtjdtjdtjdftjdtjdtjdtjdftjdd	dt d
”ftjdd	dt d”ftjd
ddgd	dtjdddftjdtdtjdtdfg}|D ]4\}}| ” }||d| ||d| |  	||” qąd S )NTr3   rI   gėQø	@r!   ©r:   r   é   z<U3Śabc)rI   r   ŚdefZghiZWXYZz<U4y       @      @r   )
r   r   r   ŚzerosŚarrayŚint64Zfloat64Ścomplexr5   ŚassertPreciseEqual)r   r@   rA   ZinpsŚx1rR   Zx2r
   r
   r   Śtest_setitem_0d³   s$    ’÷z!TestFancyIndexing.test_setitem_0dc           
   
      sÄ  t tdd  fdd}g }| d” | t dddddg”” | t dgdggdgdggg”” | dddddg” | d	” | d
” tjtjfD ],}tjd|d d”}|D ]}||| q¾q¢|j	}|| d t |”t | d ”|g| d gg}|D ]&} 
t”  || W 5 Q R X q 
t”  |dg W 5 Q R X  
t”  tddt}	|	|dd W 5 Q R X  
t”" tddt}	|	|ddd W 5 Q R X  ”  d S )NTr3   c                    s@   | |} | |}  ||” t|dr< |j|jk” d S )NŚorder)rd   Śhasattrr8   rg   )r?   ŚindrD   rE   ©rA   r@   r   r
   r   ŚcheckĻ   s
    


z-TestFancyIndexing.test_np_take.<locals>.checkr   r]   é   rI   ©r   r]   r   )rm   )rl   rI   r!   é   r\   )rH   rI   g333333ū?r   )r   r   Śappendr   ra   rb   Z
complex128rJ   rK   r=   ŚassertRaisesŚ
IndexErrorr   r   Zdisable_leak_check)
r   rk   Ztest_indicesŚdtr   ri   ZszAZillegal_indicesŚxZtake_kwsr
   rj   r   Śtest_np_takeŹ   s>    
$

  
’zTestFancyIndexing.test_np_takeN)T)T)T)T)Ś__name__Ś
__module__Ś__qualname__r    r+   r/   r2   rF   rO   rQ   rT   rU   rW   rX   rY   r[   rf   rt   r
   r
   r
   r   r      s   



		


r   Ś__main__)r&   Znumpyr   ZunittestZnumbar   r   Z
numba.corer   Znumba.core.errorsr   Znumba.tests.supportr   r   r   r   r   r   r   r   ru   Śmainr
   r
   r
   r   Ś<module>   s    m