o
    1&i(                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZmZmZmZ ddiZd	di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-ed4d5 Z.ed6d7 Z/d8d9 Z0d:d; Z1d<d= Z2G d>d? d?eZ3G d@dA dAeZ4G dBdC dCeZ5e6dDkre7  dS dS )E    N)jitnjittypeof)utilstypeserrors)TestCasetag)	arraydecl)intpellipsisslice2_typeslice3_typeZforceobjTnopythonc                 C   s   | ||| S N )astartstopstepr   r   DC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_indexing.pyslicing_1d_usecase      r   c                 C   s>   | ||| }d}t |jd D ]}||| |d  7 }q|S Nr      rangeshape)r   r   r   r   btotalir   r   r   slicing_1d_usecase2   s
   r!   c                 C   s<   | || }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r   r   r   r   r    r   r   r   slicing_1d_usecase3   
   r"   c                 C   s<   | d d  }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r   r   r    r   r   r   slicing_1d_usecase4$   r#   r$   c                 C   s<   | |d  }d}t |jd D ]}||| |d  7 }q|S r   r   r   r   r   r   r    r   r   r   slicing_1d_usecase5+   r#   r&   c                 C   s<   | d | }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r   r   r   r    r   r   r   slicing_1d_usecase62   r#   r'   c                 C   s>   | |d d }d}t |jd D ]}||| |d  7 }q|S Nr   r   r   r%   r   r   r   slicing_1d_usecase79   
   r*   c                 C   s>   | d d d }d}t |jd D ]}||| |d  7 }q|S r(   r   r%   r   r   r   slicing_1d_usecase8A   r+   r,   c                 C   s   | ||||||f S r   r   )r   start1stop1step1start2stop2step2r   r   r   slicing_2d_usecaseJ   s   r3   c                 C   s   | ||||f S r   r   )r   r-   r.   r/   indexr   r   r   slicing_2d_usecase3N   s   r5   c                 C   sB   | ||d |f }d}t |jd D ]}||| |d  7 }q|S r   r   )r   index0r-   index2r   r   r    r   r   r   slicing_3d_usecaseR   
   r8   c                 C   sB   | |d ||f }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r6   r.   r7   r   r   r    r   r   r   slicing_3d_usecase2Y   r9   r:   c                 C   s8   | | }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r4   r   r   r    r   r   r   partial_1d_usecase`   s
   r;   c                 C      | | S r   r   )r   r    r   r   r   integer_indexing_1d_usecaseg      r=   c                 C   s   | ||f S r   r   r   i1i2r   r   r   integer_indexing_2d_usecasej      rB   c                 C   s   | | | S r   r   r?   r   r   r   integer_indexing_2d_usecase2m   rC   rD   c                 C   s   | ||df S N.r   r   r    jr   r   r   ellipsis_usecase1p      rH   c                 C   s   | d||f S rE   r   rF   r   r   r   ellipsis_usecase2s   rI   rJ   c                 C   s   | |d|f S rE   r   rF   r   r   r   ellipsis_usecase3v   r   rK   c                 C   s   | d  S r   r   r   r   r   r   none_index_usecasey   r>   rM   c                 C      | d S )Nr   r   rL   r   r   r   empty_tuple_usecase|   r>   rO   c                 C   s   || |< d S r   r   )r   r4   valuer   r   r   setitem_usecase   s   rQ   c                 C   s   || d d < d S r   r   )r   rP   r   r   r   setitem_broadcast_usecase   s   rR   c                 C   s   || |||< | S r   r   )r   r   r   r   r   r   r   r   slicing_1d_usecase_set   s   rS   c                 C   s   | ||  |7  < | S r   r   )r   r   r   r   r   r   r   slicing_1d_usecase_add   s   rT   c                 C   s   || ||||||f< | S r   r   )r   r   r   r   r   r0   r1   r2   r   r   r   slicing_2d_usecase_set   s   rU   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d2d3 Zefd4d5Zd6d7 Zefd8d9Z d:d; Z!efd<d=Z"d>d? Z#ee$fd@dAZ%dBdC Z&dDdE Z'dFdG Z(efdHdIZ)efdJdKZ*dLdM Z+efdNdOZ,dPdQ Z-efdRdSZ.dTdU Z/efdVdWZ0dXdY Z1dZd[ Z2d\d] Z3efd^d_Z4d`da Z5efdbdcZ6ddde Z7dfS )g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|fi ||}tjddd}dD ]}||g|R  }| ||g|R  | q&d S )Nr   C
   i4Zdtype)r   rX   r         r   rX   r   r   r   rX   r   rX   r]   )	   r   ra   r)   r   r   ra   r   )r   r   Arrayint32r   nparangeassertPreciseEqual)	selfflagspyfunc	arraytypeargtyscfuncr   indicesexpectedr   r   r   test_1d_slicing   s   	zTestGetItem.test_1d_slicingc                 C      | j td d S N)rm   )rt   Noflagsrl   r   r   r   test_1d_slicing_npm   rI   zTestGetItem.test_1d_slicing_npmc           	      C   s&  t }ttjdd}|tjtjtjf}t|fi ||}tjddd}g d}|D ]}| ||g|R  ||g|R   q*ttjdd}|tjtjtjf}t|fi ||}tjdddd d d	 }| |j	d
  | |j	d  g d}|D ]}| ||g|R  ||g|R   q|d S )Nr   rW   rX   rY   rZ   r[   r\   r_   r`   rb   A   r]   C_CONTIGUOUSF_CONTIGUOUS)
r!   r   rg   rh   r   ri   rj   assertEqualassertFalserm   	rl   rm   rn   ro   rp   rq   r   argsargr   r   r   test_1d_slicing2   s$   &&zTestGetItem.test_1d_slicing2c                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_slicing2_npm   rI   z TestGetItem.test_1d_slicing2_npmc           	      C   s  t }ttjdd}|tjtjf}t|fi ||}tjddd}g d}|D ]}| ||g|R  ||g|R   q(ttjdd}|tjtjf}t|fi ||}tjdddd d d	 }| |j	d
  | |j	d  |D ]}| ||g|R  ||g|R   qtd S )Nr   rW   rX   rY   rZ   ))r^   rX   )r]   r^   )rX   r   r   rX   )   rX   r{   r|   r]   r}   r~   )
r"   r   rg   rh   r   ri   rj   r   r   rm   r   r   r   r   test_1d_slicing3   s"   &&zTestGetItem.test_1d_slicing3c                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_slicing3_npm   rI   z TestGetItem.test_1d_slicing3_npmc                 C   s   t }ttjdd}|f}t|fi ||}tjddd}| |||| ttjdd}|f}t|fi ||}tjdddd d d }| |j	d	  | |j	d
  | |||| d S )Nr   rW   rX   rY   rZ   r{   r|   r]   r}   r~   )
r$   r   rg   rh   r   ri   rj   r   r   rm   rl   rm   rn   ro   rp   rq   r   r   r   r   test_1d_slicing4   s   zTestGetItem.test_1d_slicing4c                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_slicing4_npm  rI   z TestGetItem.test_1d_slicing4_npmc           	      C   s   t tdd}ttjdd}|tjf}t|fi ||}tjddd}|D ]}| |||||| q'ttjdd}|tjf}t|fi ||}tjdddd d d	 }| 	|j
d
  | 	|j
d  |D ]}| |||||| qkd S )NirX   r   rW   rY   rZ   r{   r|   r]   r}   r~   )listr   r   rg   rh   r   ri   rj   r   r   rm   )	rl   rn   rm   r   ro   rp   rq   r   r   r   r   r   check_1d_slicing_with_arg  s    

z%TestGetItem.check_1d_slicing_with_argc                 C      t }| || d S r   )r&   r   rl   rm   rn   r   r   r   test_1d_slicing5)     zTestGetItem.test_1d_slicing5c                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_slicing5_npm-  rI   z TestGetItem.test_1d_slicing5_npmc                 C   r   r   )r'   r   r   r   r   r   test_1d_slicing60  r   zTestGetItem.test_1d_slicing6c                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_slicing6_npm4  rI   z TestGetItem.test_1d_slicing6_npmc                 C   r   r   )r*   r   r   r   r   r   test_1d_slicing77  r   zTestGetItem.test_1d_slicing7c                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_slicing7_npm;  rI   z TestGetItem.test_1d_slicing7_npmc                 C   r   r   )r,   r   r   r   r   r   test_1d_slicing8>  r   zTestGetItem.test_1d_slicing8c                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_slicing8_npmB  rI   z TestGetItem.test_1d_slicing8_npmc                 C   s   t }ttjdd}|tjtjtjf}t|fi ||}tjddddd}dD ]}| j||g|R  ||g|R  d|f d	 q*d
S )z
        arr_2d[a:b:c]
        r]   rW   d   rY   rZ   rX   rz   zfor args %s)msgN)	r   r   rg   rh   r   ri   rj   reshaperk   )rl   rm   rn   ro   rp   rq   r   r   r   r   r   test_2d_slicingE  s    zTestGetItem.test_2d_slicingc                 C   ru   rv   )r   rw   rx   r   r   r   test_2d_slicing_npmT  rI   zTestGetItem.test_2d_slicing_npmc                 C   sN  t }ttjdd}|tjtjtjtjtjtjf}t|fi ||}tjddddd}g d}dd	 t	||D }|D ]}	||g|	R  }
| 
||g|	R  |
 q?ttjdd
}|tjtjtjtjtjtjf}t|fi ||}tjdddddddddddf }|D ]}	||g|	R  }
| 
||g|	R  |
 qdS )z&
        arr_2d[a:b:c, d:e:f]
        r]   rW   r   rY   rZ   rX   )	r[   r\   r_   r`   rb   )rX   r   ra   )rc   r   r)   rd   rf   c                 S   s   g | ]\}}|| qS r   r   ).0Ztup1Ztup2r   r   r   
<listcomp>n  s    z0TestGetItem.test_2d_slicing2.<locals>.<listcomp>r{     r|   N)r3   r   rg   rh   r   ri   rj   r   	itertoolsproductrk   )rl   rm   rn   ro   rp   rq   r   rr   r   r   rs   r   r   r   test_2d_slicing2W  s0   

*zTestGetItem.test_2d_slicing2c                 C   ru   rv   )r   rw   rx   r   r   r   test_2d_slicing2_npm  rI   z TestGetItem.test_2d_slicing2_npmc           
      C   s(  t }ttjdd}|tjtjtjtjf}t|fi ||}tjddddd}g d}|D ]}||g|R  }	| ||g|R  |	 q0ttjdd}|tjtjtjtjf}t|fi ||}tjd	ddd
d
ddddddf }|D ]}||g|R  }	| ||g|R  |	 q{dS )z"
        arr_2d[a:b:c, d]
        r]   rW   r   rY   rZ   rX   ))r   rX   r   r   )r]   r^   r   r   )rX   r   ra      )rc   r   r)      )r   rX   r]   r^   )r   ra   r^   r   r{   r   r|   N)	r5   r   rg   rh   r   ri   rj   r   rk   )
rl   rm   rn   ro   rp   rq   r   r   r   rs   r   r   r   test_2d_slicing3  s*   *zTestGetItem.test_2d_slicing3c                 C   ru   rv   )r   rw   rx   r   r   r   test_2d_slicing3_npm  rI   z TestGetItem.test_2d_slicing3_npmc           	      C     t }ttjdd}|tjtjtjf}t|fi ||}tjdddddd}g d}|D ]}| ||g|R  ||g|R   q/ttjdd}|tjtjtjf}t|fi ||}tjd	ddd d d
 ddd}|D ]}| ||g|R  ||g|R   qrd S Nr^   rW   i  rY   rZ   rX   ))r   rc   r   r\   )rc   r   r   )r   rc   ra   )r   rc   r]   r{   i  r]   )	r8   r   rg   rh   r   ri   rj   r   r   r   r   r   r   test_3d_slicing     &"&zTestGetItem.test_3d_slicingc                 C   ru   rv   )r   rw   rx   r   r   r   test_3d_slicing_npm  rI   zTestGetItem.test_3d_slicing_npmc           	      C   r   r   )	r:   r   rg   rh   r   ri   rj   r   r   r   r   r   r   test_3d_slicing2  r   zTestGetItem.test_3d_slicing2c                 C   ru   rv   )r   rw   rx   r   r   r   test_3d_slicing2_npm  rI   z TestGetItem.test_3d_slicing2_npmc           
      C   s  t }ttjdd}|tjf}t|fi ||}tjddd}| ||d||d | ||d||d | ||d||d ttjdd	}|tjf}t|fi ||}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}||f}t|fi ||}tjddtjd}dD ]}t|tj
}	|	jdksJ | |||	|||	 qd S )Nr   rW   rX   rY   rZ   r   rc   ra   r{   r]   r}   r~   r^      )r   rc   r)   )r=   r   rg   rh   r   ri   rj   r   r   rm   int16arrayastypendim)
rl   rm   rn   ro   rp   rq   r   	indextyper    idxr   r   r   test_1d_integer_indexing  s6   

z$TestGetItem.test_1d_integer_indexingc                 C   ru   rv   )r   rw   rx   r   r   r   test_1d_integer_indexing_npm  rI   z(TestGetItem.test_1d_integer_indexing_npmc                 C   s   t }ttjdd}|tjf}t|fi ||}tjddddd}| ||d||d | ||d||d | ||d	||d	 ttjdd
}|tjf}t|fi ||}tjdddddd d d }| ||d||d d S )Nr]   rW   r   rY   rZ   rX   r   rc   ra   r{   r|   r   r   )	r=   r   rg   rh   r   ri   rj   r   rk   r   r   r   r   test_integer_indexing_1d_for_2d  s   

 z+TestGetItem.test_integer_indexing_1d_for_2dc                 C   ru   rv   )r   rw   rx   r   r   r   #test_integer_indexing_1d_for_2d_npm%  rI   z/TestGetItem.test_integer_indexing_1d_for_2d_npmc           
      C   s  t jddddd}ttjdd}|tjtjf}t|fi ||}| ||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jtjf}t|fi ||}| ||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}|||f}t|fi ||}dD ]$\}}	t 
|t j}t 
|	t j}	| ||||	||||	 qd S )Nr   rY   rZ   rX   r]   rW   r   r^   rc   r)   ra   r}   r~   r{   r   ))r   r^   )r   rc   )r)   ra   )ri   rj   r   r   rg   rh   r   r   r   rm   r   r   )
rl   rm   rn   r   ro   rp   rq   r   r    rG   r   r   r   test_2d_integer_indexing(  s4   *
z$TestGetItem.test_2d_integer_indexingc                 C   ru   rv   )r   rw   rx   r   r   r   test_2d_integer_indexing_npmM  rI   z(TestGetItem.test_2d_integer_indexing_npmc                 C   s   | j td | j ttd d S )N)rn   rm   rn   )r   rD   rw   rx   r   r   r   test_2d_integer_indexing2P  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   r<   r   r   )Xi0r   r   r   index1V     z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index1c                    s    | | |S r   r   )r   r   r@   r   r   r   r7   Y  s   z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index2rX   r]   r   r   r   ra   )r   ri   rj   r   r   )rl   r7   r   r   r   r   !test_2d_integer_indexing_via_callU  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jtjf}t|fi ||}| 	||dd||dd | 	||dd||dd | 	||d	d	||d	d	 d S )
Nr   rY   rZ   rX   r]   rW   r   rc   ra   )
ri   rj   r   rB   r   rg   rh   Zfloat32r   r   )rl   rm   r   rn   ro   rp   rq   r   r   r   test_2d_float_indexinga  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                    sx   |t jf}t|fi  }| d|| d | jd d }| ||| | | d|| d d S )Nr   r   ra   )r   rh   r   r   r   )arrro   rp   rq   nrm   rn   rl   r   r   checko  s   
z3TestGetItem.test_partial_1d_indexing.<locals>.check   rY   rZ   )r   r^   r]   rW   )r^   r   Fr{   )r;   ri   rj   r   r   rg   rh   T)rl   rm   r   r   ro   r   r   r   test_partial_1d_indexingl  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jtjf}t|fi  S r   )r   r   r   r   )r   rp   r   r   r   compile_func  s   z0TestGetItem.check_ellipsis.<locals>.compile_funcc                    sP   d} | }t ||D ]\}}|| ||}tj| |||| || qd S )N)r   r   r]   ra   r)   )r   r   ri   testingassert_equal)r   boundsrq   r    rG   x)r   rn   r   r   run  s    z'TestGetItem.check_ellipsis.<locals>.run   rY   rZ   r      r^   )ri   rj   r   )rl   rn   rm   r   r   )r   rm   rn   r   check_ellipsis  s    zTestGetItem.check_ellipsisc                 C      |  t| d S r   )r   rH   rl   rm   r   r   r   test_ellipsis1  rI   zTestGetItem.test_ellipsis1c                 C   ru   rv   )r   rw   rx   r   r   r   test_ellipsis1_npm  rI   zTestGetItem.test_ellipsis1_npmc                 C   r   r   )r   rJ   r   r   r   r   test_ellipsis2  rI   zTestGetItem.test_ellipsis2c                 C   ru   rv   )r   rw   rx   r   r   r   test_ellipsis2_npm  rI   zTestGetItem.test_ellipsis2_npmc                 C   r   r   )r   rK   r   r   r   r   test_ellipsis3  rI   zTestGetItem.test_ellipsis3c                 C   ru   rv   )r   rw   rx   r   r   r   test_ellipsis3_npm  rI   zTestGetItem.test_ellipsis3_npmc                 C   sR   t dd }|j}d}d}t|| ||}||}||}tj|| d S )Nc                 S   s:   t | }d}t | d|f D ]
\}}||| |< q|S )Nr   .)ri   
zeros_likeZndenumerate)r   outr    r4   valr   r   r   udt  s
   
z0TestGetItem.test_ellipsis_issue1498.<locals>.udtr   )r   py_funcri   rj   r   r   r   )rl   r   r   Z	outersizeZ	innersizer   gotrs   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   rN   )N).r   r   )r   r   r   r   r     r   z0TestGetItem.test_ellipsis_issue1499.<locals>.udtr^   )r   ri   rj   r   r   r   )rl   r   r   r   rs   r   r   r   test_ellipsis_issue1499  s   


z#TestGetItem.test_ellipsis_issue1499c                 C   s\   t }ttjdd}|f}t|fi ||}tjddddd}| |||| d S )Nr]   rW   r   rY   rZ   rX   )	rM   r   rg   rh   r   ri   rj   r   rk   r   r   r   r   test_none_index  s   zTestGetItem.test_none_indexc                 C   s:   |    | jtd W d    d S 1 sw   Y  d S rv   )ZassertTypingErrorr   rw   rx   r   r   r   test_none_index_npm  s   
"zTestGetItem.test_none_index_npmc                 C   sZ   t }ttjdd}|f}t|fi ||}tjdddd}| |||| d S )Nr   rW   r   rY   rZ   r   )	rO   r   rg   rh   r   ri   rj   r   rk   r   r   r   r   test_empty_tuple_indexing  s   z%TestGetItem.test_empty_tuple_indexingc                 C   ru   rv   )r   rw   rx   r   r   r   test_empty_tuple_indexing_npm  rI   z)TestGetItem.test_empty_tuple_indexing_npmN)8__name__
__module____qualname____doc__enable_pyobj_flagsrt   ry   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   rB   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV      sl    $)%$
%
	rV   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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   s\   ddl m} dd }|d
i ||}tjddd}| }|| || | || d	S )z9 this used to work, and was used in one of the tutorials r   )r   c                 S   s(   t t| D ]}|td | |< qd S )Nr   )r   lendecimalDecimal)r   r4   r   r   r   rn     s   z3TestSetItem.test_conversion_setitem.<locals>.pyfuncvoid(i8[:])r   r@   rZ   N)r   )numbar   ri   rj   copyrk   )rl   rm   r   rn   rq   r   controlr   r   r   test_conversion_setitem  s   z#TestSetItem.test_conversion_setitemc                    sb  t }ttjdd}ttjdd}||tjtjtjf}t|fi ||}d}tj|ddd  dd	|d	 ||d |d
 d| d	 | | d | d
 g} fdd}	t	||D ]0\}
}dD ])}|
||f}t
| }||	  | g|R  }||	  | g|R  }| || q`qZ| t |tj tjd ddd W d   dS 1 sw   Y  dS )z+
        1d to 1d slice assignment
        r   rW   r{   rX   rA   rZ   (   r   r]   r^   r)   c                      s   t j ddS )NrY   rZ   )ri   r   r   r   r   r   	make_dest  r   z2TestSetItem.test_1d_slicing_set.<locals>.make_destr   r]   ra   r)   N)rS   r   rg   rh   r   r   ri   rj   r   r   slicerk   assertRaises
ValueErrorr   )rl   rm   rn   	dest_typeZsrc_typerp   rq   Nr   r   r   r   r   r   r4   pyleftcleftr   r   r   test_1d_slicing_set  s,   
"zTestSetItem.test_1d_slicing_setc                 C   sL  t }ttjdd}||tjtjtjf}t|fi ||j| j}d}t|}	tj	|tjd}
|d| |	 d df}||

 g|R  }||

 g|R  }| || |d| |	 df}| t}||

 g|R   W d   n1 sxw   Y  |ddrt|
td| |	 d }d|	 d	| d
}| |t|j dS dS )z9
        Generic sequence to 1d slice assignment
        r   rW   rX   rZ   Nr   Fzcannot assign slice of shape (z,) from input of shape (z,))rS   r   rg   rh   r   Z	overloadsentry_pointr   ri   rj   r   rk   r   r   getr   assertInstr	exception)rl   rm   Zseqtyseqrn   r  rp   rq   r  kr   r   rs   r   raisesZ
slice_sizer   r   r   r   check_1d_slicing_set_sequence  s,   z)TestSetItem.check_1d_slicing_set_sequencec                 C   s   |  |ttjdd dS )z.
        Tuple to 1d slice assignment
        r]   )r   N)r  r   ZUniTupler   r   r   r   r   test_1d_slicing_set_tuple3  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   r  N)r  r   Listr   r   r   r   r   test_1d_slicing_set_list:  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|fi ||}d}tj|dd}d}dd|d ||d |d	 d
| d | | d | d	 g}	t	|	|	D ])\}
}dD ]"}||
||f}||
 g|R  }||
 g|R  }| || qSqMdS )z/
        scalar to 1d slice assignment
        r   rW   rX   rY   rZ   *   r   r]   r^   r)   r   N)rS   r   rg   rh   r   r   ri   rj   r   r   r   rk   )rl   rm   rn   ro   rp   rq   r  r   r   r   r   r   r   r   r  r  r   r   r   test_1d_slicing_broadcastA  s$   z%TestSetItem.test_1d_slicing_broadcastc           
      C   s   t }ttjdd}||tjtjf}t|fi ||}tjddd}dD ](}|t||t|  g|R  }|t||t|  g|R  }	| 	||	 q%d S )Nr   rW   rX   rY   rZ   )r   )r]   r   )
rT   r   rg   rh   r   ri   rj   r   r   rk   )
rl   rm   rn   ro   rp   rq   r   testr  r  r   r   r   test_1d_slicing_addX  s     zTestSetItem.test_1d_slicing_addc                 C   ru   rv   )r  rw   rx   r   r   r   test_1d_slicing_set_npmd  rI   z#TestSetItem.test_1d_slicing_set_npmc                 C   ru   rv   )r  rw   rx   r   r   r   test_1d_slicing_set_list_npmg  rI   z(TestSetItem.test_1d_slicing_set_list_npmc                 C   ru   rv   )r  rw   rx   r   r   r   test_1d_slicing_set_tuple_npmj  rI   z)TestSetItem.test_1d_slicing_set_tuple_npmc                 C   ru   rv   )r  rw   rx   r   r   r   test_1d_slicing_broadcast_npmm  rI   z)TestSetItem.test_1d_slicing_broadcast_npmc                 C   ru   rv   )r  rw   rx   r   r   r   test_1d_slicing_add_npmp  rI   z#TestSetItem.test_1d_slicing_add_npmc              	   C   s   t }ttjdd}||tjtjtjtjtjtjf}t|fi ||}tjddddd}g d}|D ]@}|t||t	|dd	  t	|d	d
  f g|R  }	|t||t	|dd	  t	|d	d
  f g|R  }
| 
|
|	 q5dS )z+
        2d to 2d slice assignment
        r]   r{   r   rY   rZ   rX   )r   rX   r   r   rX   r   )r]   r^   r   r]   r^   r   )rX   r   r   rX   r   r   )r   rX   ra   r   rX   ra   )r   rX   r]   r   rX   r]   r   r^      N)rU   r   rg   rh   r   ri   rj   r   r   r   rk   )rl   rm   rn   ro   rp   rq   r   testsr  r  r  r   r   r   test_2d_slicing_sets  s   88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|fi ||}tjddddd}d}g d}|D ]}	||	 |g|	R  }
||	 |g|	R  }| 
||
 q8d	S )
z/
        scalar to 2d slice assignment
        r]   rW   r   rY   rZ   rX   r  r  N)rU   r   rg   rh   r   r   ri   rj   r   r   rk   )rl   rm   rn   ro   rp   rq   r   r   r  r  r  r  r   r   r   test_2d_slicing_broadcast  s   z%TestSetItem.test_2d_slicing_broadcastc                 C   ru   rv   )r  rw   rx   r   r   r   test_2d_slicing_set_npm  rI   z#TestSetItem.test_2d_slicing_set_npmc                 C   ru   rv   )r   rw   rx   r   r   r   test_2d_slicing_broadcast_npm  rI   z)TestSetItem.test_2d_slicing_broadcast_npmc                 C   s   t d}t|dd | | g d t|t dt jd | | g d t ddd}t|dd | | g d	g d
g dg dS )z+
        scalar indexed assignment
        r   r   r  )r   r  r]   r^   r   r^   r   )r   r  r]   r   r   rc   )r   r   r]   )r  r  r  )r     r   N)	ri   rj   rQ   r   tolistr   r   Zuint16r   )rl   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 | | g dg dg t ddd}t|t dddd | | g dg dg t d	dddd}t|t dddd g dg dg}| | |ggd  t d}t|t dddd | | g d
 t ddd}t|t dd|j dddd | | g dg dg dS )z.
        broadcasted array assignment
        r   r  r  r]   r^   r   r   )r   r]   r^   r   )r   r]   r^   r   r   )r   r   r  N)ri   rj   rR   r   r$  r   size)rl   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    n1 s#w   Y  t|j}| d| t ddd}t dddd}| t}t|| W d    n1 s[w   Y  t|j}| d| t ddd}t d}| t}t|| W d    n1 sw   Y  t|j}| d| d S )	Nr   rX   r]   z,cannot broadcast source array for assignmentr   z>cannot assign slice of shape (2, 5) from input of shape (1, 5)r   z>cannot assign slice of shape (2, 4) from input of shape (2, 5))	ri   rj   r   r   r   rR   r	  r
  r   )rl   r'  srcr  errmsgr   r   r   test_setitem_broadcast_error  s6   




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  r^   r]   r   r   r   r   )ri   rj   r   rS   r   r$  )rl   r'  r)  r   r   r   test_slicing_1d_broadcast  s   ""&z%TestSetItem.test_slicing_1d_broadcastc                 C   sd   t d}d|j_| ttjf}t|dd W d    n1 s"w   Y  | 	dt
|j d S )Nr   Fr   r  z%Cannot modify readonly array of type:)ri   rj   rm   Z	writeabler   	TypeErrorr   ZTypingErrorrQ   r  r	  r
  )rl   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     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  t j}ttjdd}ttjdd}ttjdd}dtfddftfddftfddfttfddfttfddfttfddfttfddftfddfttfddfttfddftttfddftttfddftttfddfttfddftttfddftttfddftttfddftttfddfttttfddftttfddfttttfddftttfddftttfddftttfddfg}|D ]+\}}}t	|}	|||	}
| 
t|
j| | 
|
jj|rdnd| | |
j q|D ],\}}}t	|}	|||	}
| 
t|
j| | 
|
jj|rdnd| | |
j q|D ]'\}}}t	|}	|||	}
| 
t|
j| | 
|
jjd | |
j qdS )	zc
        Check an appropriate layout is inferred for the result of array
        indexing.
        r^   rW   r   r{   )r   TTTFN)r
   Zget_array_index_typer   rg   Zfloat64r   r   r   r   Tupler   tupler4   resultZlayoutr   Zadvanced)rl   funcZctyZftyZatyrr   Zindex_tupleZkeep_c_r4   rZkeep_fr   r   r   test_layout  sj   



&





zTestTyping.test_layoutN)r   r   r   r   r6  r   r   r   r   r/    s    r/  __main__)8r   r   numpyri   Zunittestr   r   r   r   Z
numba.corer   r   r   Znumba.tests.supportr   r	   Znumba.core.typingr
   Znumba.core.typesr   r   r   r   r   rw   r   r!   r"   r$   r&   r'   r*   r,   r3   r5   r8   r:   r;   r=   rB   rD   rH   rJ   rK   rM   rO   rQ   rR   rS   rT   rU   rV   r   r/  r   mainr   r   r   r   <module>   sf    	

    K  1O