o
    8ήc$                     @   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rMe  dS dS )    N)jittypeof)types)TypingError)MemoryLeakMixinTestCasetagc                 C   s   | | S N )abr
   r
   F/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_fancy_indexing.pygetitem_usecase   s   r   c                 C   s   || |< d S r	   r
   )r   idxr   r
   r
   r   setitem_usecase      r   c                 C   s   t | |S r	   nptake)Aindicesr
   r
   r   np_take   r   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   sD   t d|d dgg}|r |t dd|d gt g dg7 }|S )Nr      )r   r   r   r   )r   int16uint16bool_)selfNmanychoicesr
   r
   r   generate_advanced_indices   s   z+TestFancyIndexing.generate_advanced_indicesc              	   c   s    |r,t 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  qJqAd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   sl    t | j||d}t|d D ]#}| ||d |D ]}|D ]}|d| |f ||d  V  qqqdS )z
        Generate advanced index tuples by generating basic index tuples
        and adding a single advanced index item.
        r#   r   N)listr%   r*   r0   )r!   r"   r-   r#   r$   ir/   advr
   r
   r   generate_advanced_index_tuples8   s   "z0TestFancyIndexing.generate_advanced_index_tuplesc                 c   sP    |  |||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)r5   r*   lenEllipsis)r!   r"   r-   r#   r/   r3   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 ]9}|||}|j|us"J |||}	| |	j|j | |	j|j tj	|	| |	j
rM|	d tj	|| qd S )NTnopython*   )r   r   copybaseassertEqualshapedtyper   testingassert_equalsizefill)
r!   arrr   pyfunccfuncorig	orig_baseindexexpectedgotr
   r
   r   check_getitem_indicesN   s    



z'TestFancyIndexing.check_getitem_indicesc                 C   F   d}d}t || |f| t j}| ||}| || d S N      )r   arangereshapeastypeint32r5   rM   r!   r"   r.   rE   r   r
   r
   r   test_getitem_tupled   s
   "z$TestFancyIndexing.test_getitem_tuplec                 C   J   d}d}t || |f| t j}| j||dd}| || d S NrP   rQ   Fr1   )r   rR   rS   rT   rU   r8   rM   rV   r
   r
   r   test_getitem_tuple_and_ellipsism      "z1TestFancyIndexing.test_getitem_tuple_and_ellipsisc                 C   s>   t dddd }td}||d | |d |d  d S )NTr9   c                 S   s   | d | d< d S )N).r   ).r   r
   )rE   vr
   r
   r   fooy   s   z7TestFancyIndexing.test_ellipsis_getsetitem.<locals>.foor&   r   r   )r   r   rR   r>   )r!   r]   rE   r
   r
   r   test_ellipsis_getsetitemw   s
   


z*TestFancyIndexing.test_ellipsis_getsetitemc                 C   sD   d}d}t || |f| t j}| |}| || d S rO   )r   rR   rS   rT   rU   r%   rM   rV   r
   r
   r   test_getitem_array   s
   "
z$TestFancyIndexing.test_getitem_arrayc           	      C   s   t }tdd|}|D ]3}|| }t|}t|}|||| |||| | |j|j | |j|j tj|| qd S )NTr9   )	r   r   r   
zeros_liker>   r?   r@   rA   rB   )	r!   rE   r   rF   rG   rJ   srcrK   rL   r
   r
   r   check_setitem_indices   s   

z'TestFancyIndexing.check_setitem_indicesc                 C   rN   rO   )r   rR   rS   rT   rU   r5   rb   rV   r
   r
   r   test_setitem_tuple   s
   "z$TestFancyIndexing.test_setitem_tuplec                 C   rX   rY   )r   rR   rS   rT   rU   r8   rb   rV   r
   r
   r   test_setitem_tuple_and_ellipsis   r[   z1TestFancyIndexing.test_setitem_tuple_and_ellipsisc                 C   sH   d}d}t || |f| t jd }| |}| || d S )NrP   rQ   
   )r   rR   rS   rT   rU   r%   rb   rV   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g dd	dtjdddftjdtdtjdtdfg}|D ]\}}| }||d| ||d| | 	|| qod S )NTr9   rQ   gQ	@r&   r@   r      z<U3abc)rQ   r   )ri   defghiWXYZz<U4y       @      @r   )
r   r   r   zerosarrayint64float64complexr<   assertPreciseEqual)r!   rF   rG   inpsx1r\   x2r
   r
   r   test_setitem_0d   s&   z!TestFancyIndexing.test_setitem_0dc           
   	      s  t tdd  fdd}g }|d |tg d |tdgdggdgdggg |g d |d	 |d
 tjtjfD ]}tjd|dd}|D ]}||| qYqK|j	}|| d t|t| d |g| d gg}|D ]}
t  || W d    n1 sw   Y  q
t  |dg W d    n1 sw   Y  
t tddt}	|	|dd W d    n1 sw   Y  
t tddt}	|	|ddd W d    n1 sw   Y    d S )NTr9   c                    sD   | |} | |} || t|dr |j|jk d S d S )Norder)rr   hasattrr>   rw   )rE   indrK   rL   rG   rF   r!   r
   r   check   s   


z-TestFancyIndexing.test_np_take.<locals>.checkr   )r   rh   r      rQ   rh   r|   r   rh   r   )r}   )r|   rQ   r&      rg   )rP   rQ   g333333?r   )r   r   appendr   rn   ro   
complex128rR   rS   rC   assertRaises
IndexErrorr   r   disable_leak_check)
r!   r{   test_indicesdtr   ry   szAillegal_indicesxtake_kwsr
   rz   r   test_np_take   sH   
$

 zTestFancyIndexing.test_np_takeN)T)__name__
__module____qualname__r%   r0   r5   r8   rM   rW   rZ   r^   r_   rb   rc   rd   rf   rv   r   r
   r
   r
   r   r      s     



		


r   __main__)r+   numpyr   unittestnumbar   r   
numba.corer   numba.core.errorsr   numba.tests.supportr   r   r   r   r   r   r   r   r   mainr
   r
   r
   r   <module>   s      m