o
    ۾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_typeforceobjTnopythonc                 C   s   | ||| S N )astartstopstepr   r   M/home/ubuntu/.local/lib/python3.10/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   r4   c                 C   s   | ||||f S r   r   )r   r.   r/   r0   indexr   r   r   slicing_2d_usecase3N   s   r6   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   
   r9   c                 C   sB   | |d ||f }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r7   r/   r8   r   r    r!   r   r   r   slicing_3d_usecase2Y   r:   r;   c                 C   s8   | | }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r5   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      rC   c                 C   s   | | | S r   r   r@   r   r   r   integer_indexing_2d_usecase2m   rD   rE   c                 C   s   | ||df S N.r   r   r!   jr   r   r   ellipsis_usecase1p      rI   c                 C   s   | d||f S rF   r   rG   r   r   r   ellipsis_usecase2s   rJ   rK   c                 C   s   | |d|f S rF   r   rG   r   r   r   ellipsis_usecase3v   r   rL   c                 C   s   | d  S r   r   r   r   r   r   none_index_usecasey   r?   rN   c                 C      | d S )Nr   r   rM   r   r   r   empty_tuple_usecase|   r?   rP   c                 C   s   || |< d S r   r   )r   r5   valuer   r   r   setitem_usecase   s   rR   c                 C   s   || d d < d S r   r   )r   rQ   r   r   r   setitem_broadcast_usecase   s   rS   c                 C   s   || |||< | S r   r   )r   r   r   r   r   r   r   r   slicing_1d_usecase_set   s   rT   c                 C   s   | ||  |7  < | S r   r   )r   r   r   r   r   r   r   slicing_1d_usecase_add   s   rU   c                 C   s   || ||||||f< | S r   r   )r   r   r   r   r   r1   r2   r3   r   r   r   slicing_2d_usecase_set   s   rV   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dtype)r   rY   r         r   rY   r   r   r   rY   r   rY   r_   )	   r   rc   r*   r   r   rc   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)ro   )rv   Noflagsrn   r   r   r   test_1d_slicing_npm   rJ   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   rX   rY   rZ   r[   r]   r^   ra   rb   rd   A   r_   C_CONTIGUOUSF_CONTIGUOUS)
r"   r   ri   rj   r   rk   rl   assertEqualassertFalsero   	rn   ro   rp   rq   rr   rs   r   argsargr   r   r   test_1d_slicing2   s$   &&zTestGetItem.test_1d_slicing2c                 C   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing2_npm   rJ   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   rX   rY   rZ   r[   ))r`   rY   )r_   r`   )rY   r   r   rY   )   rY   r}   r~   r_   r   r   )
r#   r   ri   rj   r   rk   rl   r   r   ro   r   r   r   r   test_1d_slicing3   s"   &&zTestGetItem.test_1d_slicing3c                 C   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing3_npm   rJ   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   rX   rY   rZ   r[   r}   r~   r_   r   r   )
r%   r   ri   rj   r   rk   rl   r   r   ro   rn   ro   rp   rq   rr   rs   r   r   r   r   test_1d_slicing4   s   zTestGetItem.test_1d_slicing4c                 C   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing4_npm  rJ   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 )NirY   r   rX   rZ   r[   r}   r~   r_   r   r   )listr   r   ri   rj   r   rk   rl   r   r   ro   )	rn   rp   ro   r   rq   rr   rs   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   rn   ro   rp   r   r   r   test_1d_slicing5)     zTestGetItem.test_1d_slicing5c                 C   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing5_npm-  rJ   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   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing6_npm4  rJ   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   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing7_npm;  rJ   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   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing8_npmB  rJ   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_   rX   d   rZ   r[   rY   r|   zfor args %s)msgN)	r   r   ri   rj   r   rk   rl   reshaperm   )rn   ro   rp   rq   rr   rs   r   r   r   r   r   test_2d_slicingE  s    zTestGetItem.test_2d_slicingc                 C   rw   rx   )r   ry   rz   r   r   r   test_2d_slicing_npmT  rJ   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_   rX   r   rZ   r[   rY   )	r]   r^   ra   rb   rd   )rY   r   rc   )re   r   r*   rf   rh   c                 S   s   g | ]\}}|| qS r   r   ).0tup1tup2r   r   r   
<listcomp>n  s    z0TestGetItem.test_2d_slicing2.<locals>.<listcomp>r}     r~   N)r4   r   ri   rj   r   rk   rl   r   	itertoolsproductrm   )rn   ro   rp   rq   rr   rs   r   rt   r   r   ru   r   r   r   test_2d_slicing2W  s0   

*zTestGetItem.test_2d_slicing2c                 C   rw   rx   )r   ry   rz   r   r   r   test_2d_slicing2_npm  rJ   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_   rX   r   rZ   r[   rY   ))r   rY   r   r   )r_   r`   r   r   )rY   r   rc      )re   r   r*      )r   rY   r_   r`   )r   rc   r`   r   r}   r   r~   N)	r6   r   ri   rj   r   rk   rl   r   rm   )
rn   ro   rp   rq   rr   rs   r   r   r   ru   r   r   r   test_2d_slicing3  s*   *zTestGetItem.test_2d_slicing3c                 C   rw   rx   )r   ry   rz   r   r   r   test_2d_slicing3_npm  rJ   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`   rX   i  rZ   r[   rY   ))r   re   r   r^   )re   r   r   )r   re   rc   )r   re   r_   r}   i  r_   )	r9   r   ri   rj   r   rk   rl   r   r   r   r   r   r   test_3d_slicing     &"&zTestGetItem.test_3d_slicingc                 C   rw   rx   )r   ry   rz   r   r   r   test_3d_slicing_npm  rJ   zTestGetItem.test_3d_slicing_npmc           	      C   r   r   )	r;   r   ri   rj   r   rk   rl   r   r   r   r   r   r   test_3d_slicing2  r   zTestGetItem.test_3d_slicing2c                 C   rw   rx   )r   ry   rz   r   r   r   test_3d_slicing2_npm  rJ   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   rX   rY   rZ   r[   r   re   rc   r}   r_   r   r   r`      )r   re   r*   )r>   r   ri   rj   r   rk   rl   r   r   ro   int16arrayastypendim)
rn   ro   rp   rq   rr   rs   r   	indextyper!   idxr   r   r   test_1d_integer_indexing  s6   

z$TestGetItem.test_1d_integer_indexingc                 C   rw   rx   )r   ry   rz   r   r   r   test_1d_integer_indexing_npm  rJ   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_   rX   r   rZ   r[   rY   r   re   rc   r}   r~   r   r   )	r>   r   ri   rj   r   rk   rl   r   rm   r   r   r   r   test_integer_indexing_1d_for_2d  s   

 z+TestGetItem.test_integer_indexing_1d_for_2dc                 C   rw   rx   )r   ry   rz   r   r   r   #test_integer_indexing_1d_for_2d_npm%  rJ   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   rZ   r[   rY   r_   rX   r   r`   re   r*   rc   r   r   r}   r   ))r   r`   )r   re   )r*   rc   )rk   rl   r   r   ri   rj   r   r   r   ro   r   r   )
rn   ro   rp   r   rq   rr   rs   r   r!   rH   r   r   r   test_2d_integer_indexing(  s4   *
z$TestGetItem.test_2d_integer_indexingc                 C   rw   rx   )r   ry   rz   r   r   r   test_2d_integer_indexing_npmM  rJ   z(TestGetItem.test_2d_integer_indexing_npmc                 C   s   | j td | j ttd d S )N)rp   ro   rp   )r   rE   ry   rz   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   rA   r   r   r   r8   Y  s   z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index2rY   r_   r   r   r   rc   )r   rk   rl   r   r   )rn   r8   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   rZ   r[   rY   r_   rX   r   re   rc   )
rk   rl   r   rC   r   ri   rj   float32r   r   )rn   ro   r   rp   rq   rr   rs   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   rc   )r   rj   r   r   r   )arrrq   rr   rs   nro   rp   rn   r   r   checko  s   
z3TestGetItem.test_partial_1d_indexing.<locals>.check   rZ   r[   )r   r`   r_   rX   )r`   r   Fr}   )r<   rk   rl   r   r   ri   rj   T)rn   ro   r   r   rq   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   rr   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_   rc   r*   )r   r   rk   testingassert_equal)r   boundsrs   r!   rH   x)r   rp   r   r   run  s    z'TestGetItem.check_ellipsis.<locals>.run   rZ   r[   r      r`   )rk   rl   r   )rn   rp   ro   r   r   )r   ro   rp   r   check_ellipsis  s    zTestGetItem.check_ellipsisc                 C      |  t| d S r   )r   rI   rn   ro   r   r   r   test_ellipsis1  rJ   zTestGetItem.test_ellipsis1c                 C   rw   rx   )r   ry   rz   r   r   r   test_ellipsis1_npm  rJ   zTestGetItem.test_ellipsis1_npmc                 C   r   r   )r   rK   r   r   r   r   test_ellipsis2  rJ   zTestGetItem.test_ellipsis2c                 C   rw   rx   )r   ry   rz   r   r   r   test_ellipsis2_npm  rJ   zTestGetItem.test_ellipsis2_npmc                 C   r   r   )r   rL   r   r   r   r   test_ellipsis3  rJ   zTestGetItem.test_ellipsis3c                 C   rw   rx   )r   ry   rz   r   r   r   test_ellipsis3_npm  rJ   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   .)rk   
zeros_likendenumerate)r   outr!   r5   valr   r   r   udt  s
   
z0TestGetItem.test_ellipsis_issue1498.<locals>.udtr   )r   py_funcrk   rl   r   r   r   )rn   r   r   	outersize	innersizer   gotru   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   rO   )N).r   r   )r   r   r   r   r     r   z0TestGetItem.test_ellipsis_issue1499.<locals>.udtr`   )r   rk   rl   r   r   r   )rn   r   r   r   ru   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_   rX   r   rZ   r[   rY   )	rN   r   ri   rj   r   rk   rl   r   rm   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 rx   )assertTypingErrorr   ry   rz   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   rX   r   rZ   r[   r   )	rP   r   ri   rj   r   rk   rl   r   rm   r   r   r   r   test_empty_tuple_indexing  s   z%TestGetItem.test_empty_tuple_indexingc                 C   rw   rx   )r   ry   rz   r   r   r   test_empty_tuple_indexing_npm  rJ   z)TestGetItem.test_empty_tuple_indexing_npmN)8__name__
__module____qualname____doc__enable_pyobj_flagsrv   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   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW      sl    $)%$
%
	rW   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   r5   r   r   r   rp     s   z3TestSetItem.test_conversion_setitem.<locals>.pyfuncvoid(i8[:])r   rA   r[   N)r   )numbar   rk   rl   copyrm   )rn   ro   r   rp   rs   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   rX   r}   rY   rB   r[   (   r   r_   r`   r*   c                      s   t j ddS )NrZ   r[   )rk   r   r   r   r   r   	make_dest  r   z2TestSetItem.test_1d_slicing_set.<locals>.make_destr   r_   rc   r*   N)rT   r   ri   rj   r   r   rk   rl   r   r   slicerm   assertRaises
ValueErrorr   )rn   ro   rp   	dest_typesrc_typerr   rs   Nr   r  r   r   r   r   r5   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   rX   rY   r[   Nr   Fzcannot assign slice of shape (z,) from input of shape (z,))rT   r   ri   rj   r   	overloadsentry_pointr   rk   rl   r   rm   r  r	  getr  assertInstr	exception)rn   ro   seqtyseqrp   r
  rr   rs   r  kr   r   ru   r   raises
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   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   rX   rY   rZ   r[   *   r   r_   r`   r*   r  N)rT   r   ri   rj   r   r   rk   rl   r   r   r   rm   )rn   ro   rp   rq   rr   rs   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   rX   rY   rZ   r[   )r   )r_   r   )
rU   r   ri   rj   r   rk   rl   r   r  rm   )
rn   ro   rp   rq   rr   rs   r   testr  r  r   r   r   test_1d_slicing_addX  s     zTestSetItem.test_1d_slicing_addc                 C   rw   rx   )r  ry   rz   r   r   r   test_1d_slicing_set_npmd  rJ   z#TestSetItem.test_1d_slicing_set_npmc                 C   rw   rx   )r   ry   rz   r   r   r   test_1d_slicing_set_list_npmg  rJ   z(TestSetItem.test_1d_slicing_set_list_npmc                 C   rw   rx   )r  ry   rz   r   r   r   test_1d_slicing_set_tuple_npmj  rJ   z)TestSetItem.test_1d_slicing_set_tuple_npmc                 C   rw   rx   )r"  ry   rz   r   r   r   test_1d_slicing_broadcast_npmm  rJ   z)TestSetItem.test_1d_slicing_broadcast_npmc                 C   rw   rx   )r$  ry   rz   r   r   r   test_1d_slicing_add_npmp  rJ   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   rZ   r[   rY   )r   rY   r   r   rY   r   )r_   r`   r   r_   r`   r   )rY   r   r   rY   r   r   )r   rY   rc   r   rY   rc   )r   rY   r_   r   rY   r_   r   r`      N)rV   r   ri   rj   r   rk   rl   r   r   r  rm   )rn   ro   rp   rq   rr   rs   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_   rX   r   rZ   r[   rY   r!  r*  N)rV   r   ri   rj   r   r   rk   rl   r   r   rm   )rn   ro   rp   rq   rr   rs   r   r   r,  r#  r  r  r   r   r   test_2d_slicing_broadcast  s   z%TestSetItem.test_2d_slicing_broadcastc                 C   rw   rx   )r-  ry   rz   r   r   r   test_2d_slicing_set_npm  rJ   z#TestSetItem.test_2d_slicing_set_npmc                 C   rw   rx   )r.  ry   rz   r   r   r   test_2d_slicing_broadcast_npm  rJ   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   re   )r   r   r_   )r!  r!  r!  )r+     r   N)	rk   rl   rR   r   tolistr   r   uint16r   )rn   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)rk   rl   rS   r   r2  r   size)rn   dst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   rY   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))	rk   rl   r   r  r	  rS   r  r  r   )rn   r6  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   )rk   rl   r   rT   r   r2  )rn   r6  r9  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:)rk   rl   ro   	writeabler  	TypeErrorr   TypingErrorrR   r  r  r  )rn   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/  r0  r4  r8  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`   rX   r   r}   )r   TTTFN)r
   get_array_index_typer   ri   float64r   r   r   r   Tupler   tupler5   resultlayoutr   advanced)rn   funcctyftyatyrt   index_tuplekeep_c_r5   rkeep_fr   r   r   test_layout  sj   



&





zTestTyping.test_layoutN)r   r   r   r   rR  r   r   r   r   rA    s    rA  __main__)8r   r   numpyrk   unittestr   r   r   r   
numba.corer   r   r   numba.tests.supportr   r	   numba.core.typingr
   numba.core.typesr   r   r   r   r   ry   r   r"   r#   r%   r'   r(   r+   r-   r4   r6   r9   r;   r<   r>   rC   rE   rI   rK   rL   rN   rP   rR   rS   rT   rU   rV   rW   r   rA  r   mainr   r   r   r   <module>   sf    	

    K  1O