U
    9%e                     @   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    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   X/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_indexing.pyslicing_1d_usecase   s    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    s
    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'   s
    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.   s
    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   s
    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<   s
    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   s
    r)   c                 C   s   | ||||||f S r   r   )r   start1stop1step1start2stop2step2r   r   r   slicing_2d_usecaseM   s    r0   c                 C   s   | ||||f S r   r   )r   r*   r+   r,   indexr   r   r   slicing_2d_usecase3Q   s    r2   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   s
    r5   c                 C   sB   | |d ||f }d}t |jd D ]}||| |d  7 }q$|S r   r   )r   r3   r+   r4   r   r   r   r   r   r   slicing_3d_usecase2\   s
    r6   c                 C   s8   | | }d}t |jd D ]}||| |d  7 }q|S r   r   )r   r1   r   r   r   r   r   r   partial_1d_usecasec   s
    r7   c                 C   s   | | S r   r   )r   r   r   r   r   integer_indexing_1d_usecasej   s    r8   c                 C   s   | ||f S r   r   r   i1i2r   r   r   integer_indexing_2d_usecasem   s    r<   c                 C   s   | | | S r   r   r9   r   r   r   integer_indexing_2d_usecase2p   s    r=   c                 C   s   | ||df S N.r   r   r   jr   r   r   ellipsis_usecase1s   s    rA   c                 C   s   | d||f S r>   r   r?   r   r   r   ellipsis_usecase2v   s    rB   c                 C   s   | |d|f S r>   r   r?   r   r   r   ellipsis_usecase3y   s    rC   c                 C   s   | d  S r   r   r   r   r   r   none_index_usecase|   s    rE   c                 C   s   | d S )Nr   r   rD   r   r   r   empty_tuple_usecase   s    rF   c                 C   s   || |< d S r   r   )r   r1   valuer   r   r   setitem_usecase   s    rH   c                 C   s   || d d < d S r   r   )r   rG   r   r   r   setitem_broadcast_usecase   s    rI   c                 C   s   || |||< | S r   r   )r   r   r   r   r   r   r   r   slicing_1d_usecase_set   s    rJ   c                 C   s   | ||  |7  < | S r   r   )r   r   r   r   r   r   r   slicing_1d_usecase_add   s    rK   c                 C   s   || ||||||f< | S r   r   )r   r   r   r   r   r-   r.   r/   r   r   r   slicing_2d_usecase_set   s    rL   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   sz   t }ttjdd}|tjtjtjf}t|||d}|j}tjddd}dD ](}||f| }	| ||f| |	 qLd S )Nr   Cflags
   i4Zdtype)r   rQ   r         r   rQ   r   r   r   rQ   r   rQ   rV   )	   r   rZ   r'   r   r   rZ   r   )	r   r   Arrayint32r   entry_pointnparangeassertPreciseEqual)
selfrP   pyfunc	arraytypeargtyscrcfuncr   indicesexpectedr   r   r   test_1d_slicing   s    	zTestGetItem.test_1d_slicingc                 C   s   | j td d S NrO   )rn   Noflagsrf   r   r   r   test_1d_slicing_npm   s    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}ddd	d
dg}|D ]$}	| ||f|	 ||f|	  qZttjdd}|tjtjtjf}t|||d}|j}tjdddd d d }| 	|j
d  | 	|j
d  ddd	d
dg}|D ]&}	| ||f|	 ||f|	  q d S )Nr   rN   rO   rQ   rR   rS   rT   rU   rX   rY   r[   A   rV   C_CONTIGUOUSF_CONTIGUOUS)r    r   r`   ra   r   rb   rc   rd   assertEqualassertFalserP   
rf   rP   rg   rh   ri   rj   rk   r   argsargr   r   r   test_1d_slicing2   s:    "zTestGetItem.test_1d_slicing2c                 C   s   | j td d S ro   )r|   rp   rq   r   r   r   test_1d_slicing2_npm   s    z TestGetItem.test_1d_slicing2_npmc           
      C   s  t }ttjdd}|tjtjf}t|||d}|j}tjddd}ddd	d
dg}|D ]$}	| ||f|	 ||f|	  qVt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 ]$}	| ||f|	 ||f|	  qd S )Nr   rN   rO   rQ   rR   rS   )rW   rQ   )rV   rW   )rQ   r   r   rQ   )   rQ   rs   rt   rV   ru   rv   )r!   r   r`   ra   r   rb   rc   rd   rw   rx   rP   ry   r   r   r   test_1d_slicing3   s.    "zTestGetItem.test_1d_slicing3c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing3_npm  s    z TestGetItem.test_1d_slicing3_npmc                 C   s   t }ttjdd}|f}t|||d}|j}tjddd}| |||| ttjdd}|f}t|||d}|j}tjdddd d d	 }| 	|j
d
  | 	|j
d  | |||| d S )Nr   rN   rO   rQ   rR   rS   rs   rt   rV   ru   rv   )r"   r   r`   ra   r   rb   rc   rd   rw   rx   rP   )rf   rP   rg   rh   ri   rj   rk   r   r   r   r   test_1d_slicing4  s    zTestGetItem.test_1d_slicing4c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing4_npm  s    z TestGetItem.test_1d_slicing4_npmc           
      C   s   t tdd}ttjdd}|tjf}t|||d}|j}tjddd}|D ]}	| 	|||	|||	 qNttjdd}|tjf}t|||d}|j}tjd	ddd d d
 }| 
|jd  | 
|jd  |D ]}	| 	|||	|||	 qd S )NirQ   r   rN   rO   rR   rS   rs   rt   rV   ru   rv   )listr   r   r`   ra   r   rb   rc   rd   rw   rx   rP   )
rf   rg   rP   rz   rh   ri   rj   rk   r   r{   r   r   r   check_1d_slicing_with_arg  s"    

z%TestGetItem.check_1d_slicing_with_argc                 C   s   t }| || d S r   )r$   r   rf   rP   rg   r   r   r   test_1d_slicing55  s    zTestGetItem.test_1d_slicing5c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing5_npm9  s    z TestGetItem.test_1d_slicing5_npmc                 C   s   t }| || d S r   )r%   r   r   r   r   r   test_1d_slicing6<  s    zTestGetItem.test_1d_slicing6c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing6_npm@  s    z TestGetItem.test_1d_slicing6_npmc                 C   s   t }| || d S r   )r(   r   r   r   r   r   test_1d_slicing7C  s    zTestGetItem.test_1d_slicing7c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing7_npmG  s    z TestGetItem.test_1d_slicing7_npmc                 C   s   t }| || d S r   )r)   r   r   r   r   r   test_1d_slicing8J  s    zTestGetItem.test_1d_slicing8c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing8_npmN  s    z TestGetItem.test_1d_slicing8_npmc           	      C   s   t }ttjdd}|tjtjtjf}t|||d}|j}tjddddd}dD ].}| j	||f| ||f| d	|f d
 qTdS )z
        arr_2d[a:b:c]
        rV   rN   rO   d   rR   rS   rQ   )rT   rU   rX   rY   r[   zfor args %s)msgN)
r   r   r`   ra   r   rb   rc   rd   reshapere   )	rf   rP   rg   rh   ri   rj   rk   r   rz   r   r   r   test_2d_slicingQ  s    zTestGetItem.test_2d_slicingc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_2d_slicing_npma  s    zTestGetItem.test_2d_slicing_npmc              	   C   sV  t }ttjdd}|tjtjtjtjtjtjf}t|||d}|j}tjddddd}dd	d
ddddddg	}dd t	
||D }	|	D ](}
||f|
 }| ||f|
 | qt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 ]*}
||f|
 }| ||f|
 | q&dS )z&
        arr_2d[a:b:c, d:e:f]
        rV   rN   rO   r   rR   rS   rQ   rT   rU   rX   rY   r[   )rQ   r   rZ   )r\   r   r'   r]   r_   c                 S   s   g | ]\}}|| qS r   r   ).0Ztup1Ztup2r   r   r   
<listcomp>|  s   z0TestGetItem.test_2d_slicing2.<locals>.<listcomp>rs     rt   N)r0   r   r`   ra   r   rb   rc   rd   r   	itertoolsproductre   )rf   rP   rg   rh   ri   rj   rk   r   rl   rz   r{   rm   r   r   r   test_2d_slicing2d  sL      

  *zTestGetItem.test_2d_slicing2c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_2d_slicing2_npm  s    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}dd	d
dddg}|D ](}	||f|	 }
| 	||f|	 |
 qht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 ](}	||f|	 }
| 	||f|	 |
 qdS )z"
        arr_2d[a:b:c, d]
        rV   rN   rO   r   rR   rS   rQ   )r   rQ   r   r   )rV   rW   r   r   )rQ   r   rZ      )r\   r   r'      )r   rQ   rV   rW   )r   rZ   rW   r   rs   r   rt   N)
r2   r   r`   ra   r   rb   rc   rd   r   re   )rf   rP   rg   rh   ri   rj   rk   r   rz   r{   rm   r   r   r   test_2d_slicing3  s8    *zTestGetItem.test_2d_slicing3c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_2d_slicing3_npm  s    z TestGetItem.test_2d_slicing3_npmc           
      C   s  t }ttjdd}|tjtjtjf}t|||d}|j}tjdddddd}dd	d
ddg}|D ]$}	| 	||f|	 ||f|	  qdt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 ]$}	| 	||f|	 ||f|	  qd S NrW   rN   rO   i  rR   rS   rQ   )r   r\   r   rU   )r\   r   r   )r   r\   rZ   )r   r\   rV   rs   i  rV   )
r5   r   r`   ra   r   rb   rc   rd   r   rw   ry   r   r   r   test_3d_slicing  s*    ""zTestGetItem.test_3d_slicingc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_3d_slicing_npm  s    zTestGetItem.test_3d_slicing_npmc           
      C   s  t }ttjdd}|tjtjtjf}t|||d}|j}tjdddddd}dd	d
ddg}|D ]$}	| 	||f|	 ||f|	  qdt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 ]$}	| 	||f|	 ||f|	  qd S r   )
r6   r   r`   ra   r   rb   rc   rd   r   rw   ry   r   r   r   test_3d_slicing2  s*    ""zTestGetItem.test_3d_slicing2c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_3d_slicing2_npm  s    z TestGetItem.test_3d_slicing2_npmc           
      C   s  t }ttjdd}t||tjf|d}|j}tjddd}| ||d||d | ||d||d | ||d	||d	 ttjdd
}t||tjf|d}|j}tjdddd d d }| 	|j
d  | 	|j
d  | ||d||d | ||d||d | ||d	||d	 ttjdd}ttjdd}t|||f|d}|j}tjddtjd}dD ]@}t|tj}	|	jdkst| |||	|||	 q|d S )Nr   rN   rO   rQ   rR   rS   r   r\   rZ   rs   rV   ru   rv   rW      )r   r\   r'   )r8   r   r`   ra   r   rb   rc   rd   rw   rx   rP   int16arrayastypendimAssertionError)
rf   rP   rg   rh   rj   rk   r   	indextyper   idxr   r   r   test_1d_integer_indexing   s4    z$TestGetItem.test_1d_integer_indexingc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_integer_indexing_npm$  s    z(TestGetItem.test_1d_integer_indexing_npmc                 C   s   t }ttjdd}t||tjf|d}|j}tjddddd}| 	||d||d | 	||d	||d	 | 	||d
||d
 ttjdd}t||tjf|d}|j}tjdddddd d d }| 	||d||d d S )NrV   rN   rO   r   rR   rS   rQ   r   r\   rZ   rs   rt   r   r   )
r8   r   r`   ra   r   rb   rc   rd   r   re   rf   rP   rg   rh   rj   rk   r   r   r   r   test_integer_indexing_1d_for_2d'  s     z+TestGetItem.test_integer_indexing_1d_for_2dc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   #test_integer_indexing_1d_for_2d_npm:  s    z/TestGetItem.test_integer_indexing_1d_for_2d_npmc           
      C   s  t jddddd}ttjdd}t||tjtjf|d}|j}| ||dd	||dd	 | ||d
d
||d
d
 | ||dd||dd t jdddddd d dd d df }| 	|j
d  | 	|j
d  ttjdd}t||tjtjf|d}|j}| ||dd||dd | ||dd||dd | ||dd||dd t jddddd}ttjdd}ttjdd}t||||f|d}|j}dD ]J\}}	t |t j}t |	t j}	| ||||	||||	 qd S )Nr   rR   rS   rQ   rV   rN   rO   r   rW   r\   r'   rZ   ru   rv   rs   r   ))r   rW   )r   r\   )r'   rZ   )rc   rd   r   r   r`   ra   r   rb   rw   rx   rP   r   r   )
rf   rP   rg   r   rh   rj   rk   r   r   r@   r   r   r   test_2d_integer_indexing=  s>    *z$TestGetItem.test_2d_integer_indexingc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_2d_integer_indexing_npme  s    z(TestGetItem.test_2d_integer_indexing_npmc                 C   s   | j td | j ttd d S )N)rg   rP   rg   )r   r=   rp   rq   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   s   | | S r   r   )Xi0r   r   r   index1n  s    z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index1c                    s    | | |S r   r   )r   r   r:   r   r   r   r4   q  s    z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index2rQ   rV   r   r   r   rZ   )r   rc   rd   r   rw   )rf   r4   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   rR   rS   rQ   rV   rN   rO   r   r\   rZ   )rc   rd   r   r<   r   r`   ra   r   Zfloat32rb   rw   )rf   rP   r   rg   rh   rj   rk   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 )NrO   r   r   rZ   )r   r   ra   rb   rw   r   )arrrh   rj   rk   nrP   rg   rf   r   r   check  s    z3TestGetItem.test_partial_1d_indexing.<locals>.check   rR   rS   )r   rW   rV   rN   )rW   r   Frs   )r7   rc   rd   r   r   r`   ra   T)rf   rP   r   r   rh   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 ro   )r   r   r   r   rb   )r   rj   r   r   r   compile_func  s    z0TestGetItem.check_ellipsis.<locals>.compile_funcc                    sP   d} | }t ||D ]2\}}|| ||}tj| |||| || qd S )N)r   r   rV   rZ   r'   )r   r   rc   testingassert_equal)r   boundsrk   r   r@   x)r   rg   r   r   run  s
    z'TestGetItem.check_ellipsis.<locals>.run   rR   rS   r      rW   )rc   rd   r   )rf   rg   rP   r   r   )r   rP   rg   r   check_ellipsis  s    zTestGetItem.check_ellipsisc                 C   s   |  t| d S r   )r   rA   rf   rP   r   r   r   test_ellipsis1  s    zTestGetItem.test_ellipsis1c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_ellipsis1_npm  s    zTestGetItem.test_ellipsis1_npmc                 C   s   |  t| d S r   )r   rB   r   r   r   r   test_ellipsis2  s    zTestGetItem.test_ellipsis2c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_ellipsis2_npm  s    zTestGetItem.test_ellipsis2_npmc                 C   s   |  t| d S r   )r   rC   r   r   r   r   test_ellipsis3  s    zTestGetItem.test_ellipsis3c                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_ellipsis3_npm  s    zTestGetItem.test_ellipsis3_npmc                 C   sR   t dd }|j}d}d}t|| ||}||}||}tj|| d S )Nc                 S   s:   t | }d}t | d|f D ]\}}||| |< q |S )Nr   .)rc   
zeros_likeZndenumerate)r   outr   r1   valr   r   r   udt  s
    
z0TestGetItem.test_ellipsis_issue1498.<locals>.udtr   )r   py_funcrc   rd   r   r   r   )rf   r   r   Z	outersizeZ	innersizer   gotrm   r   r   r   test_ellipsis_issue1498  s    
z#TestGetItem.test_ellipsis_issue1498c                 C   s:   t dd }td}||}||}tj|| d S )Nc                 S   s   | d S )N).r   r   )r   r   r   r   r     s    z0TestGetItem.test_ellipsis_issue1499.<locals>.udtrW   )r   rc   rd   r   r   r   )rf   r   r   r   rm   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 )NrV   rN   rO   r   rR   rS   rQ   )
rE   r   r`   ra   r   rb   rc   rd   r   re   r   r   r   r   test_none_index  s    zTestGetItem.test_none_indexc              	   C   s$   |    | jtd W 5 Q R X d S ro   )ZassertTypingErrorr   rp   rq   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   rN   rO   r   rR   rS   r   )
rF   r   r`   ra   r   rb   rc   rd   r   re   r   r   r   r   test_empty_tuple_indexing  s    z%TestGetItem.test_empty_tuple_indexingc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_empty_tuple_indexing_npm  s    z)TestGetItem.test_empty_tuple_indexing_npmN)8__name__
__module____qualname____doc__enable_pyobj_flagsrn   rr   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM      sj   & +'$
(
	rM   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   r1   r   r   r   rg     s    z3TestSetItem.test_conversion_setitem.<locals>.pyfunczvoid(i8[:])r   r:   rS   N)numbar   rc   rd   copyre   )rf   rP   r   rg   rk   r   controlr   r   r   test_conversion_setitem  s    z#TestSetItem.test_conversion_setitemc                    sH  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 ]\\}}dD ]N}|||f}t| }||
  | f| }||
  | f| }| || qq| t" |tj tjd d	d	d W 5 Q R X dS )z+
        1d to 1d slice assignment
        r   rN   rs   rO   rQ   r;   rS   (   r   rV   rW   r'   c                      s   t j ddS )NrR   rS   )rc   r   r   r{   r   r   	make_dest"  s    z2TestSetItem.test_1d_slicing_set.<locals>.make_destr   rV   rZ   r'   N)rJ   r   r`   ra   r   r   rb   rc   rd   r   r   slicere   assertRaises
ValueErrorr   )rf   rP   rg   	dest_typeZsrc_typeri   rj   rk   Nr   r   r   r   r   rz   r1   pyleftcleftr   r   r   test_1d_slicing_set  s2        
zTestSetItem.test_1d_slicing_setc              	   C   s   t }ttjdd}||tjtjtjf}t|||d}|j}d}	t|}
tj|	tjd}|d|	 |
 d df}||	 f| }||	 f| }| 
|| |d|	 |
 df}| t}||	 f|  W 5 Q R X dS )z9
        Generic sequence to 1d slice assignment
        r   rN   rO   rQ   rS   N)rJ   r   r`   ra   r   rb   r   rc   rd   r   re   r   r   )rf   rP   Zseqtyseqrg   r   ri   rj   rk   r   kr{   rz   rm   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
        rV   )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 ]N\}}dD ]@}|	|||f}|| f| }|| f| }| || qqdS )z/
        scalar to 1d slice assignment
        r   rN   rO   rQ   rR   rS   *   r   rV   rW   r'   r   N)rJ   r   r`   ra   r   r   rb   rc   rd   r   r   r   re   )rf   rP   rg   rh   ri   rj   rk   r   r{   r   r   r   r   r   rz   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 ]L}|t||t	|  f| }	|t||t	|  f| }
| 
|	|
 qJd S )Nr   rN   rO   rQ   rR   rS   )r~   )rV   r   )rK   r   r`   ra   r   rb   rc   rd   r   r   re   )rf   rP   rg   rh   ri   rj   rk   r{   testr   r   r   r   r   test_1d_slicing_addl  s    zTestSetItem.test_1d_slicing_addc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing_set_npmy  s    z#TestSetItem.test_1d_slicing_set_npmc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing_set_list_npm|  s    z(TestSetItem.test_1d_slicing_set_list_npmc                 C   s   | j td d S ro   )r   rp   rq   r   r   r   test_1d_slicing_set_tuple_npm  s    z)TestSetItem.test_1d_slicing_set_tuple_npmc                 C   s   | j td d S ro   )r  rp   rq   r   r   r   test_1d_slicing_broadcast_npm  s    z)TestSetItem.test_1d_slicing_broadcast_npmc                 C   s   | j td d S ro   )r  rp   rq   r   r   r   test_1d_slicing_add_npm  s    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}dd	d
ddg}|D ]|}	|t	||t
|	dd  t
|	dd  f f|	 }
|t	||t
|	dd  t
|	dd  f f|	 }| ||
 qpdS )z+
        2d to 2d slice assignment
        rV   rs   rO   r   rR   rS   rQ   r   rQ   r   r   rQ   r   rV   rW   r   rV   rW   r   rQ   r   r   rQ   r   r   r   rQ   rZ   r   rQ   rZ   r   rQ   rV   r   rQ   rV   r   rW      N)rL   r   r`   ra   r   rb   rc   rd   r   r   r   re   )rf   rP   rg   rh   ri   rj   rk   r{   testsr  r   r   r   r   r   test_2d_slicing_set  s(      66zTestSetItem.test_2d_slicing_setc                 C   s   t }ttjdd}|tjtjtjtjtjtjtjf}t|||d}|j}tjddd	dd}d}d	d
dddg}	|	D ]8}
||
 |f|
 }||
 |f|
 }| || qvdS )z/
        scalar to 2d slice assignment
        rV   rN   rO   r   rR   rS   rQ   r  r
  r  r  r  r  N)rL   r   r`   ra   r   r   rb   rc   rd   r   r   re   )rf   rP   rg   rh   ri   rj   rk   r{   r   r  r  r   r   r   r   r   test_2d_slicing_broadcast  s*      z%TestSetItem.test_2d_slicing_broadcastc                 C   s   | j td d S ro   )r  rp   rq   r   r   r   test_2d_slicing_set_npm  s    z#TestSetItem.test_2d_slicing_set_npmc                 C   s   | j td d S ro   )r  rp   rq   r   r   r   test_2d_slicing_broadcast_npm  s    z)TestSetItem.test_2d_slicing_broadcast_npmc                 C   s   t d}t|dd | | dddddg t|t dt jd | | dddddg t d	dd}t|dd | | dddgdddgd
ddgg dS )z+
        scalar indexed assignment
        r   r   r  r   rV   rW   r   r   r\   r     N)	rc   rd   rH   rw   tolistr   r   Zuint16r   )rf   r   r   r   r   test_setitem  s    
zTestSetItem.test_setitemc                 C   s  t d}t|d | | dgd  t ddd}t|t dd | | dddgdddgg t ddd}t|t dddd | | dddgdddgg t ddddd}t|t dddd dddgdddgg}| | |ggd  t d}t|t dddd | | dddddg t ddd}t|t dd|j dddd | | dddgdddgg d	S )
z.
        broadcasted array assignment
        r   r  r  rV   rW   r   r   r   N)rc   rd   rI   rw   r  r   size)rf   dstZinner2r   r   r   test_setitem_broadcast  s&    

  
$z"TestSetItem.test_setitem_broadcastc              	   C   s  t d}t ddd}| t}t|| W 5 Q R X t|j}| d| t ddd}t dddd}| t}t|| W 5 Q R X t|j}| d| t ddd}t d}| t}t|| W 5 Q R X t|j}| d| d S )Nr   rQ   rV   z,cannot broadcast source array for assignmentr   z0cannot assign slice from input of different sizer   )	rc   rd   r   r   r   rI   str	exceptionrw   )rf   r  srcr   errmsgr   r   r   test_setitem_broadcast_error  s0    




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  rW   rV   r   r   r   r   )rc   rd   r   rJ   rw   r  )rf   r  r  r   r   r   test_slicing_1d_broadcast
  s    ""z%TestSetItem.test_slicing_1d_broadcastc              	   C   sP   t d}d|j_| ttjf}t|dd W 5 Q R X | 	dt
|j d S )Nr   Fr   r  z%Cannot modify readonly array of type:)rc   rd   rP   Z	writeabler   	TypeErrorr   ZTypingErrorrH   ZassertInr  r  )rf   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 ]Z\}}}t	|}	|||	}
| 
t|
j| | 
|
jj|rdnd| | |
j qv|D ]Z\}}}t	|}	|||	}
| 
t|
j| | 
|
jj|rdnd| | |
j q|D ]N\}}}t	|}	|||	}
| 
t|
j| | 
|
jjd | |
j q6dS )	zc
        Check an appropriate layout is inferred for the result of array
        indexing.
        rW   rN   r   rs   )r   TTTFN)r   Zget_array_index_typer   r`   Zfloat64r   r   r   r   Tuplerw   tupler1   resultZlayoutrx   Zadvanced)rf   funcZctyZftyZatyrl   Zindex_tupleZkeep_c_r1   rZkeep_fr   r   r   test_layout)  sh    



&





zTestTyping.test_layoutN)r   r   r   r   r*  r   r   r   r   r#  $  s   r#  __main__)<r   r   numpyrc   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_pyobjectrp   Znrtr   r    r!   r"   r$   r%   r(   r)   r0   r2   r5   r6   r7   r8   r<   r=   rA   rB   rC   rE   rF   rH   rI   rJ   rK   rL   rM   r   r#  r   mainr   r   r   r   <module>   sh   	

    c  +O
