U
    iâËd”š  ã                   @   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�rºe ;¡  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   úR/home/sam/Atlas/atlas_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 ©Néþÿÿÿr   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|	žŽ ¡ qêd 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 ]}	|  	|||	ƒ|||	ƒ¡ qÖd S )Ni÷ÿÿÿrQ   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|
žŽ |¡ 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 ]*}
||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|	žŽ |
¡ qúd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|	žŽ ¡ qæd 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|	žŽ ¡ qæd 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�s¢t‚|  |||	ƒ|||	ƒ¡ �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¡}	|  ||||	ƒ||||	ƒ¡ �q¸d 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|žŽ }|  ||¡ qÀq´|  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|žŽ }|  ||¡ q¦qšd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|�rºd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
