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 d dl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 e Zde_e Zde_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 Z0d1d2 Z1e	d3d4 Z2e	d5d6 Z3d7d8 Z4d9d: Z5d;d< Z6G d=d> d>eZ7G d?d@ d@eZ8G dAdB dBeZ9e:dCkre;  dS dS )D    N)compile_isolatedFlags)njittypeof)utilstypeserrors)TestCasetag)	arraydecl)intpellipsisslice2_typeslice3_typeTc                 C   s   | ||| S N )astartstopstepr   r   h/var/www/html/eduruby.in/lip-sync/lip-sync-env/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_usecase65   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_usecase7<   
   r*   c                 C   s>   | d d d }d}t |jd D ]}||| |d  7 }q|S r(   r   r%   r   r   r   slicing_1d_usecase8D   r+   r,   c                 C   s   | ||||||f S r   r   )r   start1stop1step1start2stop2step2r   r   r   slicing_2d_usecaseM   s   r3   c                 C   s   | ||||f S r   r   )r   r-   r.   r/   indexr   r   r   slicing_2d_usecase3Q   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_usecaseU   
   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_usecase2\   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_usecasec   s
   r;   c                 C      | | S r   r   )r   r    r   r   r   integer_indexing_1d_usecasej      r=   c                 C   s   | ||f S r   r   r   i1i2r   r   r   integer_indexing_2d_usecasem      rB   c                 C   s   | | | S r   r   r?   r   r   r   integer_indexing_2d_usecase2p   rC   rD   c                 C   s   | ||df S N.r   r   r    jr   r   r   ellipsis_usecase1s      rH   c                 C   s   | d||f S rE   r   rF   r   r   r   ellipsis_usecase2v   rI   rJ   c                 C   s   | |d|f S rE   r   rF   r   r   r   ellipsis_usecase3y   r   rK   c                 C   s   | d  S r   r   r   r   r   r   none_index_usecase|   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|||d}|j}tjddd}dD ]}||g|R  }	| ||g|R  |	 q&d S )Nr   Cflags
   i4Zdtype)r   rZ   r         r   rZ   r   r   r   rZ   r   rZ   r_   )	   r   rc   r)   r   r   rc   r   )	r   r   Arrayint32r   entry_pointnparangeassertPreciseEqual)
selfrY   pyfunc	arraytypeargtyscrcfuncr   indicesexpectedr   r   r   test_1d_slicing   s   	zTestGetItem.test_1d_slicingc                 C      | j td d S NrX   )rw   Noflagsro   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|||d}|j}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|||d}|j}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   rZ   r[   r\   r]   r^   ra   rb   rd   A   r_   C_CONTIGUOUSF_CONTIGUOUS)r!   r   ri   rj   r   rk   rl   rm   assertEqualassertFalserY   
ro   rY   rp   rq   rr   rs   rt   r   argsargr   r   r   test_1d_slicing2   s(   &&zTestGetItem.test_1d_slicing2c                 C   rx   ry   )r   rz   r{   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|||d}|j}tjddd}g d}|D ]}	| ||g|	R  ||g|	R   q(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  |D ]}	| ||g|	R  ||g|	R   qtd S )Nr   rW   rX   rZ   r[   r\   ))r`   rZ   )r_   r`   )rZ   r   r   rZ   )   rZ   r~   r   r_   r   r   )r"   r   ri   rj   r   rk   rl   rm   r   r   rY   r   r   r   r   test_1d_slicing3   s&   &&zTestGetItem.test_1d_slicing3c                 C   rx   ry   )r   rz   r{   r   r   r   test_1d_slicing3_npm  rI   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   rW   rX   rZ   r[   r\   r~   r   r_   r   r   )r$   r   ri   rj   r   rk   rl   rm   r   r   rY   )ro   rY   rp   rq   rr   rs   rt   r   r   r   r   test_1d_slicing4  s   zTestGetItem.test_1d_slicing4c                 C   rx   ry   )r   rz   r{   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|||d}|j}tjddd}|D ]}	| 	|||	|||	 q'ttjdd}|tjf}t|||d}|j}tjd	ddd d d
 }| 
|jd  | 
|jd  |D ]}	| 	|||	|||	 qkd S )NirZ   r   rW   rX   r[   r\   r~   r   r_   r   r   )listr   r   ri   rj   r   rk   rl   rm   r   r   rY   )
ro   rp   rY   r   rq   rr   rs   rt   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   ro   rY   rp   r   r   r   test_1d_slicing55     zTestGetItem.test_1d_slicing5c                 C   rx   ry   )r   rz   r{   r   r   r   test_1d_slicing5_npm9  rI   z TestGetItem.test_1d_slicing5_npmc                 C   r   r   )r'   r   r   r   r   r   test_1d_slicing6<  r   zTestGetItem.test_1d_slicing6c                 C   rx   ry   )r   rz   r{   r   r   r   test_1d_slicing6_npm@  rI   z TestGetItem.test_1d_slicing6_npmc                 C   r   r   )r*   r   r   r   r   r   test_1d_slicing7C  r   zTestGetItem.test_1d_slicing7c                 C   rx   ry   )r   rz   r{   r   r   r   test_1d_slicing7_npmG  rI   z TestGetItem.test_1d_slicing7_npmc                 C   r   r   )r,   r   r   r   r   r   test_1d_slicing8J  r   zTestGetItem.test_1d_slicing8c                 C   rx   ry   )r   rz   r{   r   r   r   test_1d_slicing8_npmN  rI   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}dD ]}| j	||g|R  ||g|R  d	|f d
 q*dS )z
        arr_2d[a:b:c]
        r_   rW   rX   d   r[   r\   rZ   r}   zfor args %s)msgN)
r   r   ri   rj   r   rk   rl   rm   reshapern   )	ro   rY   rp   rq   rr   rs   rt   r   r   r   r   r   test_2d_slicingQ  s    zTestGetItem.test_2d_slicingc                 C   rx   ry   )r   rz   r{   r   r   r   test_2d_slicing_npma  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|||d}|j}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|||d}|j}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   rX   r   r[   r\   rZ   )	r]   r^   ra   rb   rd   )rZ   r   rc   )re   r   r)   rf   rh   c                 S   s   g | ]\}}|| qS r   r   ).0Ztup1Ztup2r   r   r   
<listcomp>|  s    z0TestGetItem.test_2d_slicing2.<locals>.<listcomp>r~     r   N)r3   r   ri   rj   r   rk   rl   rm   r   	itertoolsproductrn   )ro   rY   rp   rq   rr   rs   rt   r   ru   r   r   rv   r   r   r   test_2d_slicing2d  s4   

*zTestGetItem.test_2d_slicing2c                 C   rx   ry   )r   rz   r{   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|||d}|j}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|||d}|j}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   rX   r   r[   r\   rZ   ))r   rZ   r   r   )r_   r`   r   r   )rZ   r   rc      )re   r   r)      )r   rZ   r_   r`   )r   rc   r`   r   r~   r   r   N)
r5   r   ri   rj   r   rk   rl   rm   r   rn   )ro   rY   rp   rq   rr   rs   rt   r   r   r   rv   r   r   r   test_2d_slicing3  s.   *zTestGetItem.test_2d_slicing3c                 C   rx   ry   )r   rz   r{   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|||d}|j}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|||d}|j}tjd
ddd d d ddd}|D ]}	| 	||g|	R  ||g|	R   qrd S Nr`   rW   rX   i  r[   r\   rZ   ))r   re   r   r^   )re   r   r   )r   re   rc   )r   re   r_   r~   i  r_   )
r8   r   ri   rj   r   rk   rl   rm   r   r   r   r   r   r   test_3d_slicing  "   &"&zTestGetItem.test_3d_slicingc                 C   rx   ry   )r   rz   r{   r   r   r   test_3d_slicing_npm  rI   zTestGetItem.test_3d_slicing_npmc           
      C   r   r   )
r:   r   ri   rj   r   rk   rl   rm   r   r   r   r   r   r   test_3d_slicing2  r   zTestGetItem.test_3d_slicing2c                 C   rx   ry   )r   rz   r{   r   r   r   test_3d_slicing2_npm  rI   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}dD ]}t|tj}	|	jdksJ | |||	|||	 qd S )Nr   rW   rX   rZ   r[   r\   r   re   rc   r~   r_   r   r   r`      )r   re   r)   )r=   r   ri   rj   r   rk   rl   rm   r   r   rY   int16arrayastypendim)
ro   rY   rp   rq   rs   rt   r   	indextyper    idxr   r   r   test_1d_integer_indexing   s6   z$TestGetItem.test_1d_integer_indexingc                 C   rx   ry   )r   rz   r{   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||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 )Nr_   rW   rX   r   r[   r\   rZ   r   re   rc   r~   r   r   r   )
r=   r   ri   rj   r   rk   rl   rm   r   rn   ro   rY   rp   rq   rs   rt   r   r   r   r   test_integer_indexing_1d_for_2d'  s    z+TestGetItem.test_integer_indexing_1d_for_2dc                 C   rx   ry   )r   rz   r{   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||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}dD ]$\}}	t |t j}t |	t j}	| ||||	||||	 qd S )Nr   r[   r\   rZ   r_   rW   rX   r   r`   re   r)   rc   r   r   r~   r   ))r   r`   )r   re   )r)   rc   )rl   rm   r   r   ri   rj   r   rk   r   r   rY   r   r   )
ro   rY   rp   r   rq   rs   rt   r   r    rG   r   r   r   test_2d_integer_indexing=  s@   *z$TestGetItem.test_2d_integer_indexingc                 C   rx   ry   )r   rz   r{   r   r   r   test_2d_integer_indexing_npme  rI   z(TestGetItem.test_2d_integer_indexing_npmc                 C   s   | j td | j ttd d S )N)rp   rY   rp   )r   rD   rz   r{   r   r   r   test_2d_integer_indexing2h  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   index1n     z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index1c                    s    | | |S r   r   )r   r   r@   r   r   r   r7   q  s   z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index2rZ   r_   r   r   r   rc   )r   rl   rm   r   r   )ro   r7   r   r   r   r   !test_2d_integer_indexing_via_callm  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 )Nr   r[   r\   rZ   r_   rW   rX   r   re   rc   )rl   rm   r   rB   r   ri   rj   r   Zfloat32rk   r   )ro   rY   r   rp   rq   rs   rt   r   r   r   test_2d_float_indexingy  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 )NrX   r   r   rc   )r   r   rj   rk   r   r   )arrrq   rs   rt   nrY   rp   ro   r   r   check  s   z3TestGetItem.test_partial_1d_indexing.<locals>.check   r[   r\   )r   r`   r_   rW   )r`   r   Fr~   )r;   rl   rm   r   r   ri   rj   T)ro   rY   r   r   rq   r   r   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 ry   )r   r   r   r   rk   )r   rs   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   rl   testingassert_equal)r   boundsrt   r    rG   x)r   rp   r   r   run  s    z'TestGetItem.check_ellipsis.<locals>.run   r[   r\   r      r`   )rl   rm   r   )ro   rp   rY   r   r   )r   rY   rp   r   check_ellipsis  s    zTestGetItem.check_ellipsisc                 C      |  t| d S r   )r   rH   ro   rY   r   r   r   test_ellipsis1  rI   zTestGetItem.test_ellipsis1c                 C   rx   ry   )r   rz   r{   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   rx   ry   )r   rz   r{   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   rx   ry   )r   rz   r{   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   .)rl   
zeros_likeZndenumerate)r   outr    r4   valr   r   r   udt  s
   
z0TestGetItem.test_ellipsis_issue1498.<locals>.udtr   )r   py_funcrl   rm   r   r   r   )ro   r   r   Z	outersizeZ	innersizer   gotrv   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   rl   rm   r   r   r   )ro   r   r   r   rv   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 )Nr_   rW   rX   r   r[   r\   rZ   )
rM   r   ri   rj   r   rk   rl   rm   r   rn   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 ry   )ZassertTypingErrorr   rz   r{   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   rW   rX   r   r[   r\   r   )
rO   r   ri   rj   r   rk   rl   rm   r   rn   r   r   r   r   test_empty_tuple_indexing  s   z%TestGetItem.test_empty_tuple_indexingc                 C   rx   ry   )r   rz   r{   r   r   r   test_empty_tuple_indexing_npm  rI   z)TestGetItem.test_empty_tuple_indexing_npmN)8__name__
__module____qualname____doc__enable_pyobj_flagsrw   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   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   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(   t t| D ]}|td | |< qd S )Nr   )r   lendecimalDecimal)r   r4   r   r   r   rp     s   z3TestSetItem.test_conversion_setitem.<locals>.pyfunczvoid(i8[:])r   r@   r\   N)numbar   rl   rm   copyrn   )ro   rY   r   rp   rt   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|||d}|j}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   rZ   rA   r\   (   r   r_   r`   r)   c                      s   t j ddS )Nr[   r\   )rl   r   r   r   r   r   	make_dest"  r   z2TestSetItem.test_1d_slicing_set.<locals>.make_destr   r_   rc   r)   N)rS   r   ri   rj   r   r   rk   rl   rm   r   r   slicern   assertRaises
ValueErrorr   )ro   rY   rp   	dest_typeZsrc_typerr   rs   rt   Nr   r   r   r   r   r   r4   pyleftcleftr   r   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}||	 g|R  }||	 g|R  }| 
|| |d|	 |
 df}| t}||	 g|R   W d   dS 1 suw   Y  dS )z9
        Generic sequence to 1d slice assignment
        r   rW   rX   rZ   r\   N)rS   r   ri   rj   r   rk   r   rl   rm   r   rn   r  r  )ro   rY   Zseqtyseqrp   r  rr   rs   rt   r  kr   r   rv   r   raisesr   r   r   check_1d_slicing_set_sequence0  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_tupleF  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_listM  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}
t	
|
|
D ])\}}dD ]"}|	|||f}|| g|R  }|| g|R  }| || qSqMdS )z/
        scalar to 1d slice assignment
        r   rW   rX   rZ   r[   r\   *   r   r_   r`   r)   r   N)rS   r   ri   rj   r   r   rk   rl   rm   r   r   r   rn   )ro   rY   rp   rq   rr   rs   rt   r  r   r   r   r   r   r   r   r  r  r   r   r   test_1d_slicing_broadcastT  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}dD ](}|t||t	|  g|R  }	|t||t	|  g|R  }
| 
|	|
 q%d S )Nr   rW   rX   rZ   r[   r\   )r   )r_   r   )rT   r   ri   rj   r   rk   rl   rm   r   r  rn   )ro   rY   rp   rq   rr   rs   rt   r   testr  r  r   r   r   test_1d_slicing_addl  s     zTestSetItem.test_1d_slicing_addc                 C   rx   ry   )r  rz   r{   r   r   r   test_1d_slicing_set_npmy  rI   z#TestSetItem.test_1d_slicing_set_npmc                 C   rx   ry   )r  rz   r{   r   r   r   test_1d_slicing_set_list_npm|  rI   z(TestSetItem.test_1d_slicing_set_list_npmc                 C   rx   ry   )r  rz   r{   r   r   r   test_1d_slicing_set_tuple_npm  rI   z)TestSetItem.test_1d_slicing_set_tuple_npmc                 C   rx   ry   )r  rz   r{   r   r   r   test_1d_slicing_broadcast_npm  rI   z)TestSetItem.test_1d_slicing_broadcast_npmc                 C   rx   ry   )r  rz   r{   r   r   r   test_1d_slicing_add_npm  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|||d}|j}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~   rX   r   r[   r\   rZ   )r   rZ   r   r   rZ   r   )r_   r`   r   r_   r`   r   )rZ   r   r   rZ   r   r   )r   rZ   rc   r   rZ   rc   )r   rZ   r_   r   rZ   r_   r   r`      N)rU   r   ri   rj   r   rk   rl   rm   r   r   r  rn   )ro   rY   rp   rq   rr   rs   rt   r   testsr  r  r  r   r   r   test_2d_slicing_set  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|||d}|j}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   rX   r   r[   r\   rZ   r  r  N)rU   r   ri   rj   r   r   rk   rl   rm   r   r   rn   )ro   rY   rp   rq   rr   rs   rt   r   r   r  r  r  r  r   r   r   test_2d_slicing_broadcast  s   z%TestSetItem.test_2d_slicing_broadcastc                 C   rx   ry   )r  rz   r{   r   r   r   test_2d_slicing_set_npm  rI   z#TestSetItem.test_2d_slicing_set_npmc                 C   rx   ry   )r  rz   r{   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   re   )r   r   r_   )r  r  r  )r     r   N)	rl   rm   rQ   r   tolistr   r   Zuint16r   )ro   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)rl   rm   rR   r   r"  r   size)ro   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   rZ   r_   z,cannot broadcast source array for assignmentr   z0cannot assign slice from input of different sizer   )	rl   rm   r   r  r  rR   str	exceptionr   )ro   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   )rl   rm   r   rS   r   r"  )ro   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:)rl   rm   rY   Z	writeabler  	TypeErrorr   ZTypingErrorrQ   ZassertInr'  r(  )ro   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   ri   Zfloat64r   r   r   r   Tupler   tupler4   resultZlayoutr   Zadvanced)ro   funcZctyZftyZatyru   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__)<r   r   numpyrl   ZunittestZnumba.core.compilerr   r   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   Zenable_pyobjectrz   Znrtr   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>   sl    	

    c  +O