B
     \                 @   s  d dl mZ d dlZd dlZd dlZd dlmZ d dl	m
Z
mZ d dlmZmZmZmZmZmZ ddlmZmZ e Zed e Ze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/d0 Z,d1d2 Z-ed3d4 Z.ed5d6 Z/d7d8 Z0d9d: Z1d;d< Z2G d=d> d>eZ3G d?d@ d@eZ4G dAdB dBeZ5e6dCkre7  dS )D    )print_functionN)compile_isolatedFlags)typesutilsnjiterrorstypeofnumpy_support   )TestCasetagZenable_pyobjectZnrtc             C   s   | ||| S )N )astartstopstepr   r   8lib/python3.7/site-packages/numba/tests/test_indexing.pyslicing_1d_usecase   s    r   c             C   sB   | ||| }d}x*t |jd D ]}||| |d  7 }q"W |S )Nr   r   )rangeshape)r   r   r   r   btotalir   r   r   slicing_1d_usecase2   s
    r   c             C   s@   | || }d}x*t |jd D ]}||| |d  7 }q W |S )Nr   r   )r   r   )r   r   r   r   r   r   r   r   r   slicing_1d_usecase3   s
    r   c             C   s@   | d d  }d}x*t |jd D ]}||| |d  7 }q W |S )Nr   r   )r   r   )r   r   r   r   r   r   r   slicing_1d_usecase4&   s
    r   c             C   s@   | |d  }d}x*t |jd D ]}||| |d  7 }q W |S )Nr   r   )r   r   )r   r   r   r   r   r   r   r   slicing_1d_usecase5-   s
    r   c             C   s@   | d | }d}x*t |jd D ]}||| |d  7 }q W |S )Nr   r   )r   r   )r   r   r   r   r   r   r   r   slicing_1d_usecase64   s
    r   c             C   sB   | |d d }d}x*t |jd D ]}||| |d  7 }q"W |S )Nr   r   )r   r   )r   r   r   r   r   r   r   r   slicing_1d_usecase7;   s
    r    c             C   sB   | d d d }d}x*t |jd D ]}||| |d  7 }q"W |S )Nr   r   r   )r   r   )r   r   r   r   r   r   r   r   slicing_1d_usecase8C   s
    r!   c             C   s   | ||||||f S )Nr   )r   start1stop1step1start2stop2step2r   r   r   slicing_2d_usecaseL   s    r(   c             C   s   | ||||f S )Nr   )r   r"   r#   r$   indexr   r   r   slicing_2d_usecase3P   s    r*   c             C   sF   | ||d |f }d}x*t |jd D ]}||| |d  7 }q&W |S )Nr   r   )r   r   )r   index0r"   index2r   r   r   r   r   r   slicing_3d_usecaseT   s
    r-   c             C   sF   | |d ||f }d}x*t |jd D ]}||| |d  7 }q&W |S )Nr   r   )r   r   )r   r+   r#   r,   r   r   r   r   r   r   slicing_3d_usecase2[   s
    r.   c             C   s<   | | }d}x*t |jd D ]}||| |d  7 }qW |S )Nr   r   )r   r   )r   r)   r   r   r   r   r   r   partial_1d_usecaseb   s
    r/   c             C   s   | | S )Nr   )r   r   r   r   r   integer_indexing_1d_usecasei   s    r0   c             C   s   | ||f S )Nr   )r   i1i2r   r   r   integer_indexing_2d_usecasel   s    r3   c             C   s   | | | S )Nr   )r   r1   r2   r   r   r   integer_indexing_2d_usecase2o   s    r4   c             C   s   | ||df S )N.r   )r   r   jr   r   r   ellipsis_usecase1r   s    r6   c             C   s   | d||f S )N.r   )r   r   r5   r   r   r   ellipsis_usecase2u   s    r7   c             C   s   | |d|f S )N.r   )r   r   r5   r   r   r   ellipsis_usecase3x   s    r8   c             C   s   | d  S )Nr   )r   r   r   r   none_index_usecase{   s    r9   c             C   s   | d S )Nr   r   )r   r   r   r   empty_tuple_usecase~   s    r:   c             C   s   || |< d S )Nr   )r   r)   valuer   r   r   setitem_usecase   s    r<   c             C   s   || d d < d S )Nr   )r   r;   r   r   r   setitem_broadcast_usecase   s    r=   c             C   s   || |||< | S )Nr   )r   r   r   r   r   r   r   r   slicing_1d_usecase_set   s    r>   c             C   s   | ||  |7  < | S )Nr   )r   r   r   r   r   r   r   slicing_1d_usecase_add   s    r?   c             C   s   || ||||||f< | S )Nr   )r   r   r   r   r   r%   r&   r'   r   r   r   slicing_2d_usecase_set   s    r@   c               @   s  e Zd ZdZefddZdd ZefddZdd	 Zefd
dZ	dd Z
efddZdd Zdd ZefddZdd ZefddZdd ZefddZdd Zefd d!Zd"d# Zefd$d%Zd&d' Zefd(d)Zd*d+ Zefd,d-Zd.d/ Zefd0d1Zed2d3d4 Zefd5d6Zd7d8 Z efd9d:Z!d;d< Z"efd=d>Z#ed2d?d@ Z$ee%fdAdBZ&ed2dCdD Z'dEdF Z(dGdH Z)efdIdJZ*efdKdLZ+dMdN Z,efdOdPZ-dQdR Z.efdSdTZ/dUdV Z0efdWdXZ1dYdZ Z2d[d\ Z3d]d^ Z4efd_d`Z5dadb Z6efdcddZ7dedf Z8dgS )hTestGetItemz
    Test basic indexed load from an array (returning a view or a scalar).
    Note fancy indexing is tested in test_fancy_indexing.
    c       
      C   s~   t }ttjdd}|tjtjtjf}t|||d}|j}tjddd}x0dD ](}||f| }	| ||f| |	 qNW d S )Nr   C)flags
   i4)dtype))r   rD   r   )      r   )rD   r   r   )r   rD   )r   rD   rG   )	   r   rI   )r   r   )r   rI   r   )	r   r   Arrayint32r   entry_pointnparangeassertPreciseEqual)
selfrC   pyfunc	arraytypeargtyscrcfuncr   indicesexpectedr   r   r   test_1d_slicing   s    
	zTestGetItem.test_1d_slicingc             C   s   | j td d S )N)rC   )rZ   Noflags)rR   r   r   r   test_1d_slicing_npm   s    zTestGetItem.test_1d_slicing_npmc       
      C   s4  t }ttjdd}|tjtjtjf}t|||d}|j}tjddd}ddd	d
dg}x,|D ]$}	| ||f|	 ||f|	  q\W ttjdd}|tjtjtjf}t|||d}|j}tjdddd d d }| 	|j
d  | 	|j
d  ddd	d
dg}x.|D ]&}	| ||f|	 ||f|	  qW d S )Nr   rB   )rC   rD   rE   )rF   )r   rD   r   )rG   rH   r   )rD   r   r   )r   rD   rI   )r   rD   rG   A   rG   C_CONTIGUOUSF_CONTIGUOUS)r   r   rL   rM   r   rN   rO   rP   assertEqualassertFalserC   )
rR   rC   rS   rT   rU   rV   rW   r   argsargr   r   r   test_1d_slicing2   s6    
$
zTestGetItem.test_1d_slicing2c             C   s   | j td d S )N)rC   )re   r[   )rR   r   r   r   test_1d_slicing2_npm   s    z TestGetItem.test_1d_slicing2_npmc       
      C   s  t }ttjdd}|tjtjf}t|||d}|j}tjddd}ddd	d
dg}x,|D ]$}	| ||f|	 ||f|	  qXW ttjdd}|tjtjf}t|||d}|j}tjdddd d d }| 	|j
d  | 	|j
d  x,|D ]$}	| ||f|	 ||f|	  qW d S )Nr   rB   )rC   rD   rE   )rF   )rH   rD   )rG   rH   )rD   r   )r   rD   )   rD   r]   r^   rG   r_   r`   )r   r   rL   rM   r   rN   rO   rP   ra   rb   rC   )
rR   rC   rS   rT   rU   rV   rW   r   rc   rd   r   r   r   test_1d_slicing3   s,    
$
zTestGetItem.test_1d_slicing3c             C   s   | j td d S )N)rC   )rh   r[   )rR   r   r   r   test_1d_slicing3_npm  s    z TestGetItem.test_1d_slicing3_npmc             C   s   t }ttjdd}|f}t|||d}|j}tjddd}| |||| ttjdd}|f}t|||d}|j}tjdddd d d	 }| 	|j
d
  | 	|j
d  | |||| d S )Nr   rB   )rC   rD   rE   )rF   r]   r^   rG   r_   r`   )r   r   rL   rM   r   rN   rO   rP   ra   rb   rC   )rR   rC   rS   rT   rU   rV   rW   r   r   r   r   test_1d_slicing4  s    zTestGetItem.test_1d_slicing4c             C   s   | j td d S )N)rC   )rj   r[   )rR   r   r   r   test_1d_slicing4_npm  s    z TestGetItem.test_1d_slicing4_npmc       
      C   s   t tdd}ttjdd}|tjf}t|||d}|j}tjddd}x$|D ]}	| 	|||	|||	 qPW ttjdd}|tjf}t|||d}|j}tjd	ddd d d
 }| 
|jd  | 
|jd  x$|D ]}	| 	|||	|||	 qW d S )NirD   r   rB   )rC   rE   )rF   r]   r^   rG   r_   r`   )listr   r   rL   rM   r   rN   rO   rP   ra   rb   rC   )
rR   rS   rC   rc   rT   rU   rV   rW   r   rd   r   r   r   check_1d_slicing_with_arg  s"    



z%TestGetItem.check_1d_slicing_with_argc             C   s   t }| || d S )N)r   rm   )rR   rC   rS   r   r   r   test_1d_slicing54  s    zTestGetItem.test_1d_slicing5c             C   s   | j td d S )N)rC   )rn   r[   )rR   r   r   r   test_1d_slicing5_npm8  s    z TestGetItem.test_1d_slicing5_npmc             C   s   t }| || d S )N)r   rm   )rR   rC   rS   r   r   r   test_1d_slicing6;  s    zTestGetItem.test_1d_slicing6c             C   s   | j td d S )N)rC   )rp   r[   )rR   r   r   r   test_1d_slicing6_npm?  s    z TestGetItem.test_1d_slicing6_npmc             C   s   t }| || d S )N)r    rm   )rR   rC   rS   r   r   r   test_1d_slicing7B  s    zTestGetItem.test_1d_slicing7c             C   s   | j td d S )N)rC   )rr   r[   )rR   r   r   r   test_1d_slicing7_npmF  s    z TestGetItem.test_1d_slicing7_npmc             C   s   t }| || d S )N)r!   rm   )rR   rC   rS   r   r   r   test_1d_slicing8I  s    zTestGetItem.test_1d_slicing8c             C   s   | j td d S )N)rC   )rt   r[   )rR   r   r   r   test_1d_slicing8_npmM  s    z TestGetItem.test_1d_slicing8_npmc       	      C   s   t }ttjdd}|tjtjtjf}t|||d}|j}tjddddd}x6dD ].}| j	||f| ||f| d	|f d
 qVW dS )z
        arr_2d[a:b:c]
        rG   rB   )rC   d   rE   )rF   rD   ))r   rD   r   )rG   rH   r   )rD   r   r   )r   rD   rI   )r   rD   rG   zfor args %s)msgN)
r   r   rL   rM   r   rN   rO   rP   reshaperQ   )	rR   rC   rS   rT   rU   rV   rW   r   rc   r   r   r   test_2d_slicingP  s    
zTestGetItem.test_2d_slicingc             C   s   | j td d S )N)rC   )ry   r[   )rR   r   r   r   test_2d_slicing_npm`  s    zTestGetItem.test_2d_slicing_npmc          	   C   s^  t }ttjdd}|tjtjtjtjtjtjf}t|||d}|j}tjddddd}dd	d
ddddddg	}dd t	
||D }	x0|	D ](}
||f|
 }| ||f|
 | qW ttjdd}|tjtjtjtjtjtjf}t|||d}|j}tjdddddddddddf }x2|	D ]*}
||f|
 }| ||f|
 | q,W dS )z&
        arr_2d[a:b:c, d:e:f]
        rG   rB   )rC   rv   rE   )rF   rD   )r   rD   r   )rG   rH   r   )rD   r   r   )r   rD   rI   )r   rD   rG   )rD   r   rI   )rJ   r   r   )rK   r   r   )r   rI   r   c             S   s   g | ]\}}|| qS r   r   ).0Ztup1Ztup2r   r   r   
<listcomp>{  s   z0TestGetItem.test_2d_slicing2.<locals>.<listcomp>r]   i  r^   N)r(   r   rL   rM   r   rN   rO   rP   rx   	itertoolsproductrQ   )rR   rC   rS   rT   rU   rV   rW   r   rX   rc   rd   rY   r   r   r   test_2d_slicing2c  s<    
*
zTestGetItem.test_2d_slicing2c             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_2d_slicing2_npm  s    z TestGetItem.test_2d_slicing2_npmc             C   s2  t }ttjdd}|tjtjtjtjf}t|||d}|j}tjddddd}dd	d
dddg}x0|D ](}	||f|	 }
| 	||f|	 |
 qjW ttjdd}|tjtjtjtjf}t|||d}|j}tjdddddddddddf }x2|D ]*}	||f|	 }
| 	||f|	 |
 q W dS )z"
        arr_2d[a:b:c, d]
        rG   rB   )rC   rv   rE   )rF   rD   )r   rD   r   r   )rG   rH   r   r   )rD   r   rI      )rJ   r   r      )r   rD   rG   rH   )r   rI   rH   r   r]   i  r^   N)
r*   r   rL   rM   r   rN   rO   rP   rx   rQ   )rR   rC   rS   rT   rU   rV   rW   r   rc   rd   rY   r   r   r   test_2d_slicing3  s2    
*
zTestGetItem.test_2d_slicing3c             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_2d_slicing3_npm  s    z TestGetItem.test_2d_slicing3_npmc       
      C   s  t }ttjdd}|tjtjtjf}t|||d}|j}tjdddddd}dd	d
ddg}x,|D ]$}	| 	||f|	 ||f|	  qfW ttjdd}|tjtjtjf}t|||d}|j}tjdddd d d ddd}x,|D ]$}	| 	||f|	 ||f|	  qW d S )NrH   rB   )rC   i  rE   )rF   rD   )r   rJ   r   )rG   rH   r   )rJ   r   r   )r   rJ   rI   )r   rJ   rG   r]   i  rG   )
r-   r   rL   rM   r   rN   rO   rP   rx   ra   )
rR   rC   rS   rT   rU   rV   rW   r   rc   rd   r   r   r   test_3d_slicing  s(    
$"
zTestGetItem.test_3d_slicing	importantc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_3d_slicing_npm  s    zTestGetItem.test_3d_slicing_npmc       
      C   s  t }ttjdd}|tjtjtjf}t|||d}|j}tjdddddd}dd	d
ddg}x,|D ]$}	| 	||f|	 ||f|	  qfW ttjdd}|tjtjtjf}t|||d}|j}tjdddd d d ddd}x,|D ]$}	| 	||f|	 ||f|	  qW d S )NrH   rB   )rC   i  rE   )rF   rD   )r   rJ   r   )rG   rH   r   )rJ   r   r   )r   rJ   rI   )r   rJ   rG   r]   i  rG   )
r.   r   rL   rM   r   rN   rO   rP   rx   ra   )
rR   rC   rS   rT   rU   rV   rW   r   rc   rd   r   r   r   test_3d_slicing2  s(    
$"
zTestGetItem.test_3d_slicing2c             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_3d_slicing2_npm  s    z TestGetItem.test_3d_slicing2_npmc       
      C   s  t }ttjdd}t||tjf|d}|j}tjddd}| ||d||d | ||d||d | ||d	||d	 ttjdd
}t||tjf|d}|j}tjdddd d d }| 	|j
d  | 	|j
d  | ||d||d | ||d||d | ||d	||d	 ttjdd}ttjdd}t|||f|d}|j}tjddtjd}xHdD ]@}t|tj}	|	jdkst| |||	|||	 q~W d S )Nr   rB   )rC   rD   rE   )rF   r   rJ   rI   r]   rG   r_   r`   rH      )r   rJ   r   )r0   r   rL   rM   r   rN   rO   rP   ra   rb   rC   int16arrayastypendimAssertionError)
rR   rC   rS   rT   rV   rW   r   	indextyper   idxr   r   r   test_1d_integer_indexing   s4    
z$TestGetItem.test_1d_integer_indexingc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_1d_integer_indexing_npm$  s    z(TestGetItem.test_1d_integer_indexing_npmc             C   s   t }ttjdd}t||tjf|d}|j}tjddddd}| 	||d||d | 	||d	||d	 | 	||d
||d
 ttjdd}t||tjf|d}|j}tjdddddd d d }| 	||d||d d S )NrG   rB   )rC   rv   rE   )rF   rD   r   rJ   rI   r]   r^   rg   r   )
r0   r   rL   rM   r   rN   rO   rP   rx   rQ   )rR   rC   rS   rT   rV   rW   r   r   r   r   test_integer_indexing_1d_for_2d'  s     z+TestGetItem.test_integer_indexing_1d_for_2dc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   #test_integer_indexing_1d_for_2d_npm:  s    z/TestGetItem.test_integer_indexing_1d_for_2d_npmc       
      C   s  t jddddd}ttjdd}t||tjtjf|d}|j}| ||dd	||dd	 | ||d
d
||d
d
 | ||dd||dd t jdddddd d dd d df }| 	|j
d  | 	|j
d  ttjdd}t||tjtjf|d}|j}| ||dd||dd | ||dd||dd | ||dd||dd t jddddd}ttjdd}ttjdd}t||||f|d}|j}xRdD ]J\}}	t |t j}t |	t j}	| ||||	||||	 qW d S )Nrv   rE   )rF   rD   rG   rB   )rC   r   rH   rJ   r   rI   r_   r`   r]   r   ))r   rH   )r   rJ   )r   rI   )rO   rP   rx   r   rL   rM   r   rN   ra   rb   rC   r   r   )
rR   rC   rS   r   rT   rV   rW   r   r   r5   r   r   r   test_2d_integer_indexing>  s8    *z$TestGetItem.test_2d_integer_indexingc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_2d_integer_indexing_npmf  s    z(TestGetItem.test_2d_integer_indexing_npmc             C   s   | j td | j ttd d S )N)rS   )rC   rS   )r   r4   r[   )rR   r   r   r   test_2d_integer_indexing2j  s    z%TestGetItem.test_2d_integer_indexing2c                s   t dd  t  fdd}tddd}| ||dd|d d  | ||d	d	|d	 d	  | ||d
d
|d
 d
  d S )Nc             S   s   | | S )Nr   )Xi0r   r   r   index1p  s    z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index1c                s    | | |S )Nr   )r   r   r1   )r   r   r   r,   s  s    z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index2rD   rG   rg   r   r   rI   )r   rO   rP   rx   ra   )rR   r,   r   r   )r   r   !test_2d_integer_indexing_via_callo  s    z-TestGetItem.test_2d_integer_indexing_via_callc             C   s   t jddddd}t}ttjdd}t||tjtjf|d}|j	}| 
||dd||dd | 
||d	d	||d	d	 | 
||d
d
||d
d
 d S )Nrv   rE   )rF   rD   rG   rB   )rC   r   rJ   rI   )rO   rP   rx   r3   r   rL   rM   r   Zfloat32rN   ra   )rR   rC   r   rS   rT   rV   rW   r   r   r   test_2d_float_indexing{  s    z"TestGetItem.test_2d_float_indexingc                s   t  fdd}tjdddd}ttjdd}||| tjdddd	j}ttjdd
}||| tjdddd	d d d }ttjdd}||| d S )Nc                st   t |tjf d}|j}| d|| d | jd d }| ||| | | d|| d d S )N)rC   r   r   rI   )r   r   rM   rN   ra   r   )arrrT   rV   rW   n)rC   rS   rR   r   r   check  s    z3TestGetItem.test_partial_1d_indexing.<locals>.check   rE   )rF   )r   rH   rG   rB   )rH   r   Fr]   )r/   rO   rP   rx   r   rL   rM   T)rR   rC   r   r   rT   r   )rC   rS   rR   r   test_partial_1d_indexing  s    	

z$TestGetItem.test_partial_1d_indexingc                sV   fdd  fdd}|t jddddd |t jd	ddd
d
d
 d S )Nc                s"   t t| tjtjf d}|jS )N)rC   )r   r	   r   intprN   )r   rV   )rC   rS   r   r   compile_func  s    z0TestGetItem.check_ellipsis.<locals>.compile_funcc                sT   d} | }xBt ||D ]2\}}|| ||}tj| |||| || qW d S )N)r   r   rG   rI   r   )r}   r~   rO   testingassert_equal)r   boundsrW   r   r5   x)r   rS   r   r   run  s
    z'TestGetItem.check_ellipsis.<locals>.run   rE   )rF   r      rH   )rO   rP   rx   )rR   rS   rC   r   r   )r   rC   rS   r   check_ellipsis  s    zTestGetItem.check_ellipsisc             C   s   |  t| d S )N)r   r6   )rR   rC   r   r   r   test_ellipsis1  s    zTestGetItem.test_ellipsis1c             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_ellipsis1_npm  s    zTestGetItem.test_ellipsis1_npmc             C   s   |  t| d S )N)r   r7   )rR   rC   r   r   r   test_ellipsis2  s    zTestGetItem.test_ellipsis2c             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_ellipsis2_npm  s    zTestGetItem.test_ellipsis2_npmc             C   s   |  t| d S )N)r   r8   )rR   rC   r   r   r   test_ellipsis3  s    zTestGetItem.test_ellipsis3c             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_ellipsis3_npm  s    zTestGetItem.test_ellipsis3_npmc             C   sR   t dd }|j}d}d}t|| ||}||}||}tj|| d S )Nc             S   s>   t | }d}x*t | d|f D ]\}}||| |< q"W |S )Nr   .)rO   
zeros_likeZndenumerate)r   outr   r)   valr   r   r   udt  s
    
z0TestGetItem.test_ellipsis_issue1498.<locals>.udtr   )r   py_funcrO   rP   rx   r   r   )rR   r   r   Z	outersizeZ	innersizer   gotrY   r   r   r   test_ellipsis_issue1498  s    	z#TestGetItem.test_ellipsis_issue1498c             C   s:   t dd }td}||}||}tj|| d S )Nc             S   s   | d S )N).r   r   )r   r   r   r   r     s    z0TestGetItem.test_ellipsis_issue1499.<locals>.udtrH   )r   rO   rP   r   r   r   )rR   r   r   r   rY   r   r   r   test_ellipsis_issue1499  s
    

z#TestGetItem.test_ellipsis_issue1499c             C   sX   t }ttjdd}t||f|d}|j}tjddddd}| 	|||| d S )NrG   rB   )rC   rv   rE   )rF   rD   )
r9   r   rL   rM   r   rN   rO   rP   rx   rQ   )rR   rC   rS   rT   rV   rW   r   r   r   r   test_none_index  s    zTestGetItem.test_none_indexc          	   C   s$   |    | jtd W d Q R X d S )N)rC   )ZassertTypingErrorr   r[   )rR   r   r   r   test_none_index_npm  s    
zTestGetItem.test_none_index_npmc             C   sV   t }ttjdd}t||f|d}|j}tjdddd}| 	|||| d S )Nr   rB   )rC   r   rE   )rF   r   )
r:   r   rL   rM   r   rN   rO   rP   rx   rQ   )rR   rC   rS   rT   rV   rW   r   r   r   r   test_empty_tuple_indexing  s    z%TestGetItem.test_empty_tuple_indexingc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_empty_tuple_indexing_npm  s    z)TestGetItem.test_empty_tuple_indexing_npmN)9__name__
__module____qualname____doc__enable_pyobj_flagsrZ   r\   re   rf   rh   ri   rj   rk   rm   rn   ro   rp   rq   rr   rs   rt   ru   ry   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA      sh   & +'$'
	rA   c               @   s   e Zd ZdZefddZefddZdd Zefdd	Zefd
dZ	efddZ
efddZdd Zdd Zdd Zdd Zdd ZedefddZef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 ).TestSetItemzk
    Test basic indexed store into an array.
    Note fancy indexing is tested in test_fancy_indexing.
    c             C   sV   ddl m} dd }|d|}tjddd}| }|| || | || d	S )
z9 this used to work, and was used in one of the tutorials r   )jitc             S   s,   x&t t| D ]}|td | |< qW d S )Nrv   )r   lendecimalZDecimal)r   r)   r   r   r   rS     s    z3TestSetItem.test_conversion_setitem.<locals>.pyfunczvoid(i8[:])rv   r1   )rF   N)numbar   rO   rP   copyrQ   )rR   rC   r   rS   rW   r   Zcontrolr   r   r   test_conversion_setitem  s    z#TestSetItem.test_conversion_setitemc                sP  t }ttjdd}ttjdd}||tjtjtjf}t|||d}|j}d}tj|ddd  d	d
|d
 ||d |d d| d
 | | d | d g}	 fdd}
xpt	
|	|	D ]`\}}xVdD ]N}|||f}t| }||
  | f| }||
  | f| }| || qW qW | t" |tj tjd d	d	d W dQ R X dS )z+
        1d to 1d slice assignment
        r   rB   r]   )rC   rD   r2   )rF   (   r   rG   rH   r   c                  s   t j ddS )NrE   )rF   )rO   r   r   )rd   r   r   	make_dest$  s    z2TestSetItem.test_1d_slicing_set.<locals>.make_dest)r   rG   rI   r   N)r>   r   rL   rM   r   r   rN   rO   rP   r}   r~   slicerQ   assertRaises
ValueErrorr   )rR   rC   rS   	dest_typeZsrc_typerU   rV   rW   Nr   r   r   r   r   rc   r)   pyleftcleftr   )rd   r   test_1d_slicing_set  s(    "

zTestSetItem.test_1d_slicing_setc          	   C   s   t }ttjdd}||tjtjtjf}t|||d}|j}d}	t|}
tj|	tjd}|d|	 |
 d df}||	 f| }||	 f| }| 
|| tjdkr|d|	 |
 df}| t}||	 f|  W dQ R X dS )z9
        Generic sequence to 1d slice assignment
        r   rB   )rC   rD   )rF   )r      N)r>   r   rL   rM   r   rN   r   rO   rP   r   rQ   r
   versionr   r   )rR   rC   ZseqtyseqrS   r   rU   rV   rW   r   krd   rc   rY   r   raisesr   r   r   check_1d_slicing_set_sequence2  s     
z)TestSetItem.check_1d_slicing_set_sequencec             C   s   |  |ttjdd dS )z.
        Tuple to 1d slice assignment
        rG   )r   iN)r   r   ZUniTupler   )rR   rC   r   r   r   test_1d_slicing_set_tupleJ  s    z%TestSetItem.test_1d_slicing_set_tuplec             C   s   |  |ttjddg dS )z-
        List to 1d slice assignment
        r   iN)r   r   ZListr   )rR   rC   r   r   r   test_1d_slicing_set_listQ  s    z$TestSetItem.test_1d_slicing_set_listc             C   s   t }ttjdd}|tjtjtjtjf}t|||d}|j}d}tj|dd}d}	dd	|d	 ||d |d
 d| d	 | | d | d
 g}
xbt	
|
|
D ]R\}}xHdD ]@}|	|||f}|| f| }|| f| }| || qW qW dS )z/
        scalar to 1d slice assignment
        r   rB   )rC   rD   rE   )rF   *   r   rG   rH   r   )r   rG   rI   r   N)r>   r   rL   rM   r   r   rN   rO   rP   r}   r~   r   rQ   )rR   rC   rS   rT   rU   rV   rW   r   rd   r   r   r   r   r   rc   r   r   r   r   r   test_1d_slicing_broadcastX  s     "
z%TestSetItem.test_1d_slicing_broadcastc             C   s   t }ttjdd}||tjtjf}t|||d}|j}tjddd}xTdD ]L}|t||t	|  f| }	|t||t	|  f| }
| 
|	|
 qLW d S )Nr   rB   )rC   rD   rE   )rF   ))r   rD   )rG   rg   )r?   r   rL   rM   r   rN   rO   rP   r   r   rQ   )rR   rC   rS   rT   rU   rV   rW   rd   testr   r   r   r   r   test_1d_slicing_addp  s    
zTestSetItem.test_1d_slicing_addc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_1d_slicing_set_npm}  s    z#TestSetItem.test_1d_slicing_set_npmc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_1d_slicing_set_list_npm  s    z(TestSetItem.test_1d_slicing_set_list_npmc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_1d_slicing_set_tuple_npm  s    z)TestSetItem.test_1d_slicing_set_tuple_npmc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_1d_slicing_broadcast_npm  s    z)TestSetItem.test_1d_slicing_broadcast_npmc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_1d_slicing_add_npm  s    z#TestSetItem.test_1d_slicing_add_npmr   c          	   C   s   t }ttjdd}||tjtjtjtjtjtjf}t|||d}|j}tjddddd}dd	d
ddg}x|D ]|}	|t	||t
|	dd  t
|	dd  f f|	 }
|t	||t
|	dd  t
|	dd  f f|	 }| ||
 qrW dS )z+
        2d to 2d slice assignment
        rG   r]   )rC   rv   rE   )rF   rD   )r   rD   r   r   rD   r   )rG   rH   r   rG   rH   r   )rD   r   r   rD   r   r   )r   rD   rI   r   rD   rI   )r   rD   rG   r   rD   rG   r   rH      N)r@   r   rL   rM   r   rN   rO   rP   rx   r   r   rQ   )rR   rC   rS   rT   rU   rV   rW   rd   testsr   r   r   r   r   r   test_2d_slicing_set  s     
66zTestSetItem.test_2d_slicing_setc             C   s   t }ttjdd}|tjtjtjtjtjtjtjf}t|||d}|j}tjddd	dd}d}d	d
dddg}	x@|	D ]8}
||
 |f|
 }||
 |f|
 }| || qxW dS )z/
        scalar to 2d slice assignment
        rG   rB   )rC   rv   rE   )rF   rD   r   )r   rD   r   r   rD   r   )rG   rH   r   rG   rH   r   )rD   r   r   rD   r   r   )r   rD   rI   r   rD   rI   )r   rD   rG   r   rD   rG   N)r@   r   rL   rM   r   r   rN   rO   rP   rx   r   rQ   )rR   rC   rS   rT   rU   rV   rW   rd   r   r   r   r   r   r   r   r   test_2d_slicing_broadcast  s"    
z%TestSetItem.test_2d_slicing_broadcastc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_2d_slicing_set_npm  s    z#TestSetItem.test_2d_slicing_set_npmc             C   s   | j td d S )N)rC   )r   r[   )rR   r   r   r   test_2d_slicing_broadcast_npm  s    z)TestSetItem.test_2d_slicing_broadcast_npmc             C   s   t d}t|dd | | dddddg t|t dt jd | | dddddg t d	dd}t|dd | | dddgdddgd
ddgg dS )z+
        scalar indexed assignment
        rg   r   r   r   rG   rH   r   r   rJ   r   r   N)	rO   rP   r<   ra   tolistr   r   Zuint16rx   )rR   r   r   r   r   test_setitem  s    
zTestSetItem.test_setitemc             C   s  t d}t|d | | dgd  t ddd}t|t dd | | dddgdddgg t ddd}t|t dddd | | dddgdddgg t ddddd}t|t dddd dddgdddgg}| | |ggd  t d}t|t dddd | | dddddg t ddd}t|t dd|j dddd | | dddgdddgg d	S )
z.
        broadcasted array assignment
        rg   r   r   rG   rH   r   r   r   N)rO   rP   r=   ra   r   rx   size)rR   dstZinner2r   r   r   test_setitem_broadcast  s&    

  
$z"TestSetItem.test_setitem_broadcastc          	   C   s  t d}t ddd}| t}t|| W d Q R X t|j}| d| t ddd}t dddd}| t}t|| W d Q R X t|j}| d| t ddd}t d}| t}t|| W d Q R X t|j}| d| d S )Nrg   rD   rG   z,cannot broadcast source array for assignmentr   z0cannot assign slice from input of different sizer   )	rO   rP   rx   r   r   r=   str	exceptionra   )rR   r   srcr   errmsgr   r   r   test_setitem_broadcast_error  s*    




z(TestSetItem.test_setitem_broadcast_errorc             C   s   t ddd}t dd}t||ddd | | ddgddgddgg t ddd}t dd}t||dd d | | ddgddgddgg t ddd}t dddd}t||d dd | | ddgddgddgg d S )Nr   rH   rG   r   r   r   rg   )rO   rP   rx   r>   ra   r   )rR   r   r   r   r   r   test_slicing_1d_broadcast  s    ""z%TestSetItem.test_slicing_1d_broadcastc          	   C   sP   t d}d|j_| ttjf}t|dd W d Q R X | 	dt
|j d S )Nrg   Fr   r   z*Cannot modify value of type readonly array)rO   rP   rC   Z	writeabler   	TypeErrorr   ZTypingErrorr<   ZassertInr   r   )rR   r   r   r   r   r   test_setitem_readonly   s    
z!TestSetItem.test_setitem_readonlyN)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     s.   r   c               @   s   e Zd ZdZdd ZdS )
TestTypingz3
    Check typing of basic indexing operations
    c             C   s  ddl m} ddlm}m}m}m} |j}t	tj
dd}t	tj
dd}t	tj
dd}	d|fd	d	f|fd	d
f|fd	d
f||fd	d
f||fd
d
f||fd
d
f||fd
d
f|fd
d
f||fd
d	f||fd
d	f|||fd
d
f|||fd
d	f|||fd
d
f||fd
d
f|||fd
d
f|||fd
d
f|||fd
d
f|||fd	d
f||||fd	d
f|||fd
d	f||||fd
d	f|||fd
d
f|||fd
d
f|||fd
d
fg}
xb|
D ]Z\}}}t|}|||}| t|j| | |jj|rdnd| | |j qW xb|
D ]Z\}}}t|}|||}| t|j| | |jj|rDdnd| | |j q W xV|
D ]N\}}}t|}||	|}| t|j| | |jjd | |j qdW dS )zc
        Check an appropriate layout is inferred for the result of array
        indexing.
        r   )	arraydecl)r   ellipsisslice2_typeslice3_typerH   rB   r   r]   )r   TTTFN)Znumba.typingr   Znumba.typesr   r   r   r   Zget_array_index_typer   rL   Zfloat64ZTuplera   tupler)   resultZlayoutrb   Zadvanced)rR   r   r   r   r   r   funcZctyZftyZatyrX   Zindex_tupleZkeep_c_r)   rZkeep_fr   r   r   test_layout.  sf    









zTestTyping.test_layoutN)r   r   r   r   r  r   r   r   r   r   )  s   r   __main__)8Z
__future__r   r   r}   ZnumpyrO   Znumba.unittest_supportZunittest_supportZunittestZnumba.compilerr   r   r   r   r   r   r   r	   r
   Zsupportr   r   r   setr[   r   r   r   r   r   r   r    r!   r(   r*   r-   r.   r/   r0   r3   r4   r6   r7   r8   r9   r:   r<   r=   r>   r?   r@   rA   r   r   r   mainr   r   r   r   <module>   s`    

	    f  .Q
