
    ܙd                        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	 Zd
 Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1e	d             Z2e	d             Z3d  Z4d! Z5d" Z6 G d# d$e          Z7 G d% d&e          Z8 G d' d(e          Z9e:d)k    r ej;                     dS dS )*    N)compile_isolatedFlags)njittypeof)utilstypeserrors)TestCasetag)	arraydecl)intpellipsisslice2_typeslice3_typeTc                     | |||         S N )astartstopsteps       9lib/python3.11/site-packages/numba/tests/test_indexing.pyslicing_1d_usecaser      s    U4_    c                 |    | |||         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S Nr      rangeshape)r   r   r   r   btotalis          r   slicing_1d_usecase2r$      sQ    	%T/AE171:    1QLr   c                 z    | ||         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r   r   )r   r   r   r!   r"   r#   s         r   slicing_1d_usecase3r&       sN    	%*AE171:    1QLr   c                 z    | d d          }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r   r   )r   r!   r"   r#   s       r   slicing_1d_usecase4r(   '   sN    	!!!AE171:    1QLr   c                 z    | |d          }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r   r   r   r   r!   r"   r#   s        r   slicing_1d_usecase5r+   .   sN    	%&&	AE171:    1QLr   c                 z    | d |         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r   r   )r   r   r!   r"   r#   s        r   slicing_1d_usecase6r-   5   sN    	%4%AE171:    1QLr   c                 |    | |d d         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S Nr   r   r   r*   s        r   slicing_1d_usecase7r1   <   sP    	%))AE171:    1QLr   c                 |    | d d d         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r/   r   r*   s        r   slicing_1d_usecase8r3   D   sP    	$$B$AE171:    1QLr   c                 "    | ||||||f         S r   r   )r   start1stop1step1start2stop2step2s          r   slicing_2d_usecaser;   M   s     VE%e!3344r   c                     | ||||f         S r   r   )r   r5   r6   r7   indexs        r   slicing_2d_usecase3r>   Q   s    VE%&''r   c                     | ||d |f         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r   r   )r   index0r5   index2r!   r"   r#   s          r   slicing_3d_usecaserB   U   sV    	&&''6
!"AE171:    1QLr   c                     | |d ||f         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r   r   )r   r@   r6   rA   r!   r"   r#   s          r   slicing_3d_usecase2rD   \   sV    	&&5&&
 !AE171:    1QLr   c                 v    | |         }d}t          |j        d                   D ]}|||         |dz   z  z  }|S r   r   )r   r=   r!   r"   r#   s        r   partial_1d_usecaserF   c   sJ    	%AE171:    1QLr   c                     | |         S r   r   )r   r#   s     r   integer_indexing_1d_usecaserH   j   s    Q4Kr   c                     | ||f         S r   r   r   i1i2s      r   integer_indexing_2d_usecaserM   m   s    RU8Or   c                     | |         |         S r   r   rJ   s      r   integer_indexing_2d_usecase2rO   p   s    R59r   c                     | ||df         S N.r   r   r#   js      r   ellipsis_usecase1rT   s   s    QqS#X;r   c                     | d||f         S rQ   r   rR   s      r   ellipsis_usecase2rV   v   s    S!A#X;r   c                     | |d|f         S rQ   r   rR   s      r   ellipsis_usecase3rX   y   s    QQY<r   c                     | d          S r   r   r   s    r   none_index_usecaser[   |   s    T7Nr   c                     | d         S )Nr   r   rZ   s    r   empty_tuple_usecaser]      s    R5Lr   c                     || |<   d S r   r   )r   r=   values      r   setitem_usecaser`      s    AeHHHr   c                     || d d <   d S r   r   )r   r_   s     r   setitem_broadcast_usecaserb      s    AaaaDDDr   c                     || |||<   | S r   r   )r   r!   r   r   r   s        r   slicing_1d_usecase_setrd      s    AeDoHr   c                 *    | ||xx         |z  cc<   | S r   r   )r   r!   r   r   s       r   slicing_1d_usecase_addrf      s#     eDjMMMQMMMHr   c                      || ||||||f<   | S r   r   )r   r!   r   r   r   r8   r9   r:   s           r   slicing_2d_usecase_setrh      s#    ,-AeDofU5(()Hr   c                      e Zd ZdZefdZd ZefdZd ZefdZ	d Z
efdZd	 Zd
 ZefdZd ZefdZd ZefdZd ZefdZd ZefdZd ZefdZd ZefdZd ZefdZd ZefdZd ZefdZ d Z!efdZ"d  Z#ee$fd!Z%d" Z&d# Z'd$ Z(efd%Z)efd&Z*d' Z+efd(Z,d) Z-efd*Z.d+ Z/efd,Z0d- Z1d. Z2d/ Z3efd0Z4d1 Z5efd2Z6d3 Z7d4S )5TestGetItemz
    Test basic indexed load from an array (returning a view or a scalar).
    Note fancy indexing is tested in test_fancy_indexing.
    c                 P   t           }t          j        t          j        dd          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd          }dD ](} ||g|R  }	|                      ||g|R  |	           )d S )Nr   Cflags
   i4dtype)r   ro   r         r   ro   r   r   r   ro   r   ro   ru   )	   r   ry   r0   r   r   ry   r   )	r   r   Arrayint32r   entry_pointnparangeassertPreciseEqual)
selfrn   pyfunc	arraytypeargtyscrcfuncr   indicesexpecteds
             r   test_1d_slicingzTestGetItem.test_1d_slicing   s    #KQ44	U[%+u{CffE:::Ib%%% 
	B 
	BG va*'***H##EE!$6g$6$6$6AAAA
	B 
	Br   c                 <    |                      t                     d S Nrm   )r   Noflagsr   s    r   test_1d_slicing_npmzTestGetItem.test_1d_slicing_npm       7+++++r   c                 &   t           }t          j        t          j        dd          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd          }g d}|D ]&}	|                      ||g|	R   ||g|	R             't          j        t          j        dd          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        d	d          d d d
         }| 	                    |j
        d                    | 	                    |j
        d                    g d}|D ]&}	|                      ||g|	R   ||g|	R             'd S )Nr   rl   rm   ro   rp   rq   rs   rt   rw   rx   rz   A   ru   C_CONTIGUOUSF_CONTIGUOUS)r$   r   r   r   r   r   r   r   assertEqualassertFalsern   
r   rn   r   r   r   r   r   r   argsargs
             r   test_1d_slicing2zTestGetItem.test_1d_slicing2   s   $KQ44	U[%+u{CffE:::Ib%%%    	> 	>CVVA____eeAnnnn==== KQ44	U[%+u{CffE:::Ib%%%ccc*01110111    	> 	>CVVA____eeAnnnn====	> 	>r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_slicing2_npmz TestGetItem.test_1d_slicing2_npm       G,,,,,r   c                    t           }t          j        t          j        dd          }|t          j        t          j        f}t	          |||          }|j        }t          j        dd          }g d}|D ]&}	|                      ||g|	R   ||g|	R             't          j        t          j        dd          }|t          j        t          j        f}t	          |||          }|j        }t          j        d	d          d d d
         }| 	                    |j
        d                    | 	                    |j
        d                    |D ]&}	|                      ||g|	R   ||g|	R             'd S )Nr   rl   rm   ro   rp   rq   ))rv   ro   )ru   rv   )ro   r   r   ro   )   ro   r   r   ru   r   r   )r&   r   r   r   r   r   r   r   r   r   rn   r   s
             r   test_1d_slicing3zTestGetItem.test_1d_slicing3   s   $KQ44	U[%+6ffE:::Ib%%%    	> 	>CVVA____eeAnnnn==== KQ44	U[%+6ffE:::Ib%%%ccc*01110111 	> 	>CVVA____eeAnnnn====	> 	>r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_slicing3_npmz TestGetItem.test_1d_slicing3_npm  r   r   c                    t           }t          j        t          j        dd          }|f}t	          |||          }|j        }t          j        dd          }|                      ||           ||                     t          j        t          j        dd          }|f}t	          |||          }|j        }t          j        dd          d d d	         }| 	                    |j
        d
                    | 	                    |j
        d                    |                      ||           ||                     d S )Nr   rl   rm   ro   rp   rq   r   r   ru   r   r   )r(   r   r   r   r   r   r   r   r   r   rn   )r   rn   r   r   r   r   r   r   s           r   test_1d_slicing4zTestGetItem.test_1d_slicing4  s2   $KQ44	ffE:::Ib%%%EE!HH--- KQ44	ffE:::Ib%%%ccc*01110111EE!HH-----r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_slicing4_npmz TestGetItem.test_1d_slicing4_npm  r   r   c                    t          t          dd                    }t          j        t          j        dd          }|t          j        f}t          |||          }|j        }t          j        dd          }|D ],}	| 	                     |||	           |||	                     -t          j        t          j        dd          }|t          j        f}t          |||          }|j        }t          j        d	d          d d d
         }| 
                    |j        d                    | 
                    |j        d                    |D ],}	| 	                     |||	           |||	                     -d S )Niro   r   rl   rm   rp   rq   r   r   ru   r   r   )listr   r   r   r   r   r   r   r   r   r   rn   )
r   r   rn   r   r   r   r   r   r   r   s
             r   check_1d_slicing_with_argz%TestGetItem.check_1d_slicing_with_arg  s|   E"bMM""KQ44	U[)ffE:::Ib%%% 	< 	<CVVAs^^UU1c]];;;; KQ44	U[)ffE:::Ib%%%ccc*01110111 	< 	<CVVAs^^UU1c]];;;;	< 	<r   c                 @    t           }|                     ||           d S r   )r+   r   r   rn   r   s      r   test_1d_slicing5zTestGetItem.test_1d_slicing55  #    $&&vu55555r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_slicing5_npmz TestGetItem.test_1d_slicing5_npm9  r   r   c                 @    t           }|                     ||           d S r   )r-   r   r   s      r   test_1d_slicing6zTestGetItem.test_1d_slicing6<  r   r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_slicing6_npmz TestGetItem.test_1d_slicing6_npm@  r   r   c                 @    t           }|                     ||           d S r   )r1   r   r   s      r   test_1d_slicing7zTestGetItem.test_1d_slicing7C  r   r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_slicing7_npmz TestGetItem.test_1d_slicing7_npmG  r   r   c                 @    t           }|                     ||           d S r   )r3   r   r   s      r   test_1d_slicing8zTestGetItem.test_1d_slicing8J  r   r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_slicing8_npmz TestGetItem.test_1d_slicing8_npmN  r   r   c                 ~   t           }t          j        t          j        dd          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd                              dd          }dD ]+}| 	                     ||g|R   ||g|R  d	|
           ,dS )z
        arr_2d[a:b:c]
        ru   rl   rm   d   rp   rq   ro   r   z	for args )msgN)
r   r   r   r   r   r   r   r   reshaper   )	r   rn   r   r   r   r   r   r   r   s	            r   test_2d_slicingzTestGetItem.test_2d_slicingQ  s     $KQ44	U[%+u{CffE:::Ic&&&..r266. 	A 	AD##FF1$4t$4$4$4eeAooooo9=(? $ A A A A	A 	Ar   c                 <    |                      t                     d S r   )r   r   r   s    r   test_2d_slicing_npmzTestGetItem.test_2d_slicing_npma  r   r   c                    t           }t          j        t          j        dd          }|t          j        t          j        t          j        t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd                              dd          }g d}d	 t          j
        ||          D             }	|	D ](}
 ||g|
R  }|                      ||g|
R  |           )t          j        t          j        dd
          }|t          j        t          j        t          j        t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd                              dd          ddddddf         }|	D ](}
 ||g|
R  }|                      ||g|
R  |           )dS )z&
        arr_2d[a:b:c, d:e:f]
        ru   rl   rm   r   rp   rq   ro   )	rs   rt   rw   rx   rz   )ro   r   ry   )r{   r   r0   r|   r~   c                     g | ]
\  }}||z   S r   r   ).0tup1tup2s      r   
<listcomp>z0TestGetItem.test_2d_slicing2.<locals>.<listcomp>|  s6     I I I T4 t I I Ir   r     r   N)r;   r   r   r   r   r   r   r   r   	itertoolsproductr   )r   rn   r   r   r   r   r   r   r   r   r   r   s               r   test_2d_slicing2zTestGetItem.test_2d_slicing2d  s   
 $KQ44	U[%+u{+u{EK9ffE:::Ic&&&..r266	 	 	I I$-$5gw$G$GI I I 	> 	>Cva#H##EE!NcNNNH==== KQ44	U[%+u{+u{EK9ffE:::Ic&&&..r266sssCCaCx@ 	> 	>Cva#H##EE!NcNNNH====	> 	>r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_2d_slicing2_npmz TestGetItem.test_2d_slicing2_npm  r   r   c                 ,   t           }t          j        t          j        dd          }|t          j        t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd                              dd          }g d}|D ](}	 ||g|	R  }
| 	                     ||g|	R  |
           )t          j        t          j        dd	          }|t          j        t          j        t          j        t          j        f}t	          |||          }|j        }t          j        d
d                              dd          ddddddf         }|D ](}	 ||g|	R  }
| 	                     ||g|	R  |
           )dS )z"
        arr_2d[a:b:c, d]
        ru   rl   rm   r   rp   rq   ro   ))r   ro   r   r   )ru   rv   r   r   )ro   r   ry      )r{   r   r0      )r   ro   ru   rv   )r   ry   rv   r   r   r   r   N)
r>   r   r   r   r   r   r   r   r   r   )r   rn   r   r   r   r   r   r   r   r   r   s              r   test_2d_slicing3zTestGetItem.test_2d_slicing3  s   
 %KQ44	U[%+u{+ffE:::Ic&&&..r266
 
 
  	> 	>Cva#H##EE!NcNNNH==== KQ44	U[%+u{+ffE:::Ic&&&..r266sssCCaCx@ 	> 	>Cva#H##EE!NcNNNH====	> 	>r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_2d_slicing3_npmz TestGetItem.test_2d_slicing3_npm  r   r   c                    t           }t          j        t          j        dd          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd                              ddd          }g d}|D ]&}	| 	                     ||g|	R   ||g|	R             't          j        t          j        dd	          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        d
d          d d d                             ddd          }|D ]&}	| 	                     ||g|	R   ||g|	R             'd S Nrv   rl   rm   i  rp   rq   ro   ))r   r{   r   rt   )r{   r   r   )r   r{   ry   )r   r{   ru   r   i  ru   )
rB   r   r   r   r   r   r   r   r   r   r   s
             r   test_3d_slicingzTestGetItem.test_3d_slicing  s   #KQ44	U[%+u{CffE:::Id$'''//B;;
 
 
  	> 	>CVVA____eeAnnnn==== KQ44	U[%+u{CffE:::Id$'''!,44RR@@ 	> 	>CVVA____eeAnnnn====	> 	>r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_3d_slicing_npmzTestGetItem.test_3d_slicing_npm  r   r   c                    t           }t          j        t          j        dd          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd                              ddd          }g d}|D ]&}	| 	                     ||g|	R   ||g|	R             't          j        t          j        dd	          }|t          j        t          j        t          j        f}t	          |||          }|j        }t          j        d
d          d d d                             ddd          }|D ]&}	| 	                     ||g|	R   ||g|	R             'd S r   )
rD   r   r   r   r   r   r   r   r   r   r   s
             r   test_3d_slicing2zTestGetItem.test_3d_slicing2  s   $KQ44	U[%+u{CffE:::Id$'''//B;;
 
 
  	> 	>CVVA____eeAnnnn==== KQ44	U[%+u{CffE:::Id$'''!,44RR@@ 	> 	>CVVA____eeAnnnn====	> 	>r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_3d_slicing2_npmz TestGetItem.test_3d_slicing2_npm  r   r   c                    t           }t          j        t          j        dd          }t	          ||t          j        f|          }|j        }t          j        dd          }|                      ||d           ||d                     |                      ||d           ||d                     |                      ||d	           ||d	                     t          j        t          j        dd
          }t	          ||t          j        f|          }|j        }t          j        dd          d d d         }| 	                    |j
        d                    | 	                    |j
        d                    |                      ||d           ||d                     |                      ||d           ||d                     |                      ||d	           ||d	                     t          j        t          j        dd          }t          j        t          j        dd          }t	          |||f|          }|j        }t          j        ddt          j                  }dD ]j}t          j        |                              t          j                  }	|	j        dk    sJ |                      |||	           |||	                     kd S )Nr   rl   rm   ro   rp   rq   r   r{   ry   r   ru   r   r   rv      )r   r{   r0   )rH   r   r   r   r   r   r   r   r   r   rn   int16arrayastypendim)
r   rn   r   r   r   r   r   	indextyper#   idxs
             r   test_1d_integer_indexingz$TestGetItem.test_1d_integer_indexing   s   ,KQ44	fy%+&>eLLLIb%%%1uuQ{{3331uuQ{{3332a555 KQ44	fy%+&>eLLLIb%%%ccc*011101111uuQ{{3331uuQ{{3332a555 KQ44	KQ44	fy)&<EJJJIa28,,, 	< 	<A(1++$$RX..C8q====VVAs^^UU1c]];;;;	< 	<r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_1d_integer_indexing_npmz(TestGetItem.test_1d_integer_indexing_npm$      %%G%44444r   c                 2   t           }t          j        t          j        dd          }t	          ||t          j        f|          }|j        }t          j        dd                              dd          }| 	                     ||d           ||d                     | 	                     ||d	           ||d	                     | 	                     ||d
           ||d
                     t          j        t          j        dd          }t	          ||t          j        f|          }|j        }t          j        dd                              dd          d d d         }| 	                     ||d           ||d                     d S )Nru   rl   rm   r   rp   rq   ro   r   r{   ry   r   r   r   r   )
rH   r   r   r   r   r   r   r   r   r   r   rn   r   r   r   r   r   s          r   test_integer_indexing_1d_for_2dz+TestGetItem.test_integer_indexing_1d_for_2d'  sv   ,KQ44	fy%+&>eLLLIc&&&..r266q!eeAqkk:::q!eeAqkk:::q"uuQ||<<<KQ44	fy%+&>eLLLIb%%%--a33CCaC8q!eeAqkk:::::r   c                 <    |                      t                     d S r   )r   r   r   s    r   #test_integer_indexing_1d_for_2d_npmz/TestGetItem.test_integer_indexing_1d_for_2d_npm:  s    ,,7,;;;;;r   c           	         t          j        dd                              dd          }t          j        t          j        dd          }t          ||t          j        t          j        f|          }|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f         }| 	                    |j
        d                    | 	                    |j
        d                    t          j        t          j        dd          }t          ||t          j        t          j        f|          }|j        }|                      ||dd           ||dd                     |                      ||dd           ||dd                     |                      ||dd           ||dd                     t          j        dd                              dd          }t          j        t          j        dd          }t          j        t          j        dd          }t          ||||f|          }|j        }dD ]\  }}	t          j        |                              t           j                  }t          j        |	                              t           j                  }	|                      ||||	           ||||	                     d S )Nr   rp   rq   ro   ru   rl   rm   r   rv   r{   r0   ry   r   r   r   r   ))r   rv   )r   r{   )r0   ry   )r   r   r   r   r   r   r   r   r   r   rn   r   r   )
r   rn   r   r   r   r   r   r   r#   rS   s
             r   test_2d_integer_indexingz$TestGetItem.test_2d_integer_indexing=  s:    Ic&&&..r266KQ44	fy%+u{&K$)+ + +1a%%1a..9991a%%1a..9992r**EE!R,<,<=== Ic&&&..r266sssCCaCx@01110111KQ44	fy%+u{&K$)+ + +1a%%1a..9991a%%1a..9992r**EE!R,<,<=== Ic&&&..r266KQ44	KQ44	fy)Y&G$)+ + +. 	> 	>DAq""28,,A""28,,AVVAq!__eeAq!nn====	> 	>r   c                 <    |                      t                     d S r   )r   r   r   s    r   test_2d_integer_indexing_npmz(TestGetItem.test_2d_integer_indexing_npme  r   r   c                 ~    |                      t                     |                      t          t                     d S )N)r   )rn   r   )r   rO   r   r   s    r   test_2d_integer_indexing2z%TestGetItem.test_2d_integer_indexing2h  sK    %%-I%JJJ%%G-I 	& 	K 	K 	K 	K 	Kr   c                    t           d             t           fd            }t          j        d                              dd          }|                      ||dd          |d         d                    |                      ||dd          |d         d                    |                      ||dd          |d         d                    d S )	Nc                     | |         S r   r   )Xi0s     r   index1z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index1n  s    R5Lr   c                 (     | |         |          S r   r   )r   r   rK   r   s      r   rA   z=TestGetItem.test_2d_integer_indexing_via_call.<locals>.index2q  s    6!B%$$$r   ro   ru   r   r   r   ry   )r   r   r   r   r   )r   rA   r   r   s      @r   !test_2d_integer_indexing_via_callz-TestGetItem.test_2d_integer_indexing_via_callm  s    		 	 
			% 	% 	% 	% 
	%IbMM!!!Q''1a!A$q'2221a!A$q'2222r**AbE"I66666r   c                    t          j        dd                              dd          }t          }t	          j        t          j        dd          }t          ||t          j        t          j        f|          }|j	        }| 
                     ||dd           ||dd                     | 
                     ||d	d	           ||d	d	                     | 
                     ||d
d
           ||d
d
                     d S )Nr   rp   rq   ro   ru   rl   rm   r   r{   ry   )r   r   r   rM   r   r   r   r   float32r   r   )r   rn   r   r   r   r   r   s          r   test_2d_float_indexingz"TestGetItem.test_2d_float_indexingy  s   Ic&&&..r266,KQ44	fy%-&M$)+ + +1a%%1a..9991a%%1a..9992r**EE!R,<,<=====r   c                 B    t            fd}t          j        dd                              d          }t	          j        t          j        dd          } |||           t          j        dd                              d          j        }t	          j        t          j        dd	          } |||           t          j        dd                              d          d d d         }t	          j        t          j        dd
          } |||           d S )Nc                 n   t          |t          j        f          }|j        }                     | d           || d                     | j        d         dz
  }                     | |           || |                                          | d           || d                     d S )Nrm   r   r   ry   )r   r   r   r   r   r    )arrr   r   r   nrn   r   r   s        r   checkz3TestGetItem.test_partial_1d_indexing.<locals>.check  s    !&9ek*B(-/ / /BNEVVC^^UU3]];;;	!q AVVC^^UU3]];;;VVC__eeCnn=====r      rp   rq   )r   rv   ru   rl   )rv   r   Fr   )rF   r   r   r   r   r   r   T)r   rn   r	  r   r   r   s   ``   @r   test_partial_1d_indexingz$TestGetItem.test_partial_1d_indexing  s   #	> 	> 	> 	> 	> 	> 	> Ib%%%--f55KQ44	aIb%%%--f557KQ44	aIb%%%--f55ccc:KQ44	ar   c                     fdfd} |t          j        dd                              dd                      |t          j        dd                              ddd                     d S )	Nc                 ~    t          t          |           t          j        t          j        f          }|j        S r   )r   r   r   r   r   )r  r   rn   r   s     r   compile_funcz0TestGetItem.check_ellipsis.<locals>.compile_func  s7    !&6#;;
EJ*O(-/ / /B>!r   c           	          d} |           }t          j        ||          D ]H\  }} || ||          }t          j                             | ||           || ||                     Id S )N)r   r   ru   ry   r0   )r   r   r   testingassert_equal)r   boundsr   r#   rS   xr  r   s         r   runz'TestGetItem.check_ellipsis.<locals>.run  s    &F LOOE!)&&99 I I1E!QNN
''q!Qq!QHHHHI Ir      rp   rq   r      rv   )r   r   r   )r   r   rn   r  r  s    `` @r   check_ellipsiszTestGetItem.check_ellipsis  s    	" 	" 	" 	" 	" 	"
	I 	I 	I 	I 	I 	I 	BIb%%%--a33444BIb%%%--aA6677777r   c                 <    |                      t          |           d S r   )r  rT   r   rn   s     r   test_ellipsis1zTestGetItem.test_ellipsis1      -u55555r   c                 <    |                      t                     d S r   )r  r   r   s    r   test_ellipsis1_npmzTestGetItem.test_ellipsis1_npm      '*****r   c                 <    |                      t          |           d S r   )r  rV   r  s     r   test_ellipsis2zTestGetItem.test_ellipsis2  r  r   c                 <    |                      t                     d S r   )r"  r   r   s    r   test_ellipsis2_npmzTestGetItem.test_ellipsis2_npm  r   r   c                 <    |                      t          |           d S r   )r  rX   r  s     r   test_ellipsis3zTestGetItem.test_ellipsis3  r  r   c                 <    |                      t                     d S r   )r&  r   r   s    r   test_ellipsis3_npmzTestGetItem.test_ellipsis3_npm  r   r   c                     t           d             }|j        }d}d}t          j        ||z                                ||          } ||          } ||          }t          j                            ||           d S )Nc                     t          j        |           }d}t          j        | d|f                   D ]\  }}|||         |<   |S )Nr   .)r   
zeros_likendenumerate)r  outr#   r=   vals        r   udtz0TestGetItem.test_ellipsis_issue1498.<locals>.udt  sO    -$$CA nSa[99 $ $
s #E
1Jr   r   )r   py_funcr   r   r   r  r  )r   r/  r0  	outersize	innersizer  gotr   s           r   test_ellipsis_issue1498z#TestGetItem.test_ellipsis_issue1498  s     
	 	 
	 +		i	I-..66y)LLc#hh73<<

X.....r   c                     t           d             }t          j        d          } ||          }|                    |          }t          j                            ||           d S )Nc                     | d         S )N).r   r   )r  s    r   r/  z0TestGetItem.test_ellipsis_issue1499.<locals>.udt  s    v;r   rv   )r   r   r   r0  r  r  )r   r/  r  r3  r   s        r   test_ellipsis_issue1499z#TestGetItem.test_ellipsis_issue1499  sh     
	 	 
	 illc#hh;;s##

X.....r   c                 ,   t           }t          j        t          j        dd          }t	          ||f|          }|j        }t          j        dd                              dd          }| 	                     ||           ||                     d S )Nru   rl   rm   r   rp   rq   ro   )
r[   r   r   r   r   r   r   r   r   r   r   s          r   test_none_indexzTestGetItem.test_none_index  s    #KQ44	fyl%@@@Ic&&&..r266q		558844444r   c                     |                                  5  |                     t                     d d d            d S # 1 swxY w Y   d S r   )assertTypingErrorr9  r   r   s    r   test_none_index_npmzTestGetItem.test_none_index_npm  s    ##%% 	0 	0  w ///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   >AAc                 *   t           }t          j        t          j        dd          }t	          ||f|          }|j        }t          j        dd                              d          }| 	                     ||           ||                     d S )Nr   rl   rm   r   rp   rq   r   )
r]   r   r   r   r   r   r   r   r   r   r   s          r   test_empty_tuple_indexingz%TestGetItem.test_empty_tuple_indexing  s    $KQ44	fyl%@@@Iat$$$,,R00q		558844444r   c                 <    |                      t                     d S r   )r>  r   r   s    r   test_empty_tuple_indexing_npmz)TestGetItem.test_empty_tuple_indexing_npm      &&W&55555r   N)8__name__
__module____qualname____doc__enable_pyobj_flagsr   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   r   r   r   r  r  r  r  r  r  r"  r$  r&  r(  r4  r7  r9  r<  r>  r@  r   r   r   rj   rj      s        
 %7 B B B B(, , , &8 $> $> $> $>L- - - &8 > > > >@- - - &8 . . . .*- - -< < <0 &8 6 6 6 6- - - &8 6 6 6 6- - - &8 6 6 6 6- - - &8 6 6 6 6- - - %7 A A A A , , , &8 )> )> )> )>V- - - &8 %> %> %> %>N- - - %7 > > > >>, , , &8 > > > >>- - - .@ "< "< "< "<H5 5 5 5G ; ; ; ;&< < < .@(C&> &> &> &>P5 5 5K K K

7 
7 
7 ,> 
> 
> 
> 
> .@    08 8 8  $6 6 6 6 6+ + + $6 6 6 6 6+ + + $6 6 6 6 6+ + +/ / /*
/ 
/ 
/ %7 5 5 5 50 0 0 /A 5 5 5 56 6 6 6 6r   rj   c                       e Zd ZdZefdZefdZd ZefdZefdZ	efdZ
efdZd	 Zd
 Zd Zd Zd ZefdZefdZd Zd Zd Zd Zd Zd Zd ZdS )TestSetItemzk
    Test basic indexed store into an array.
    Note fancy indexing is tested in test_fancy_indexing.
    c                     ddl m} d }  |d          |          }t          j        dd          }|                                } ||            ||           |                     ||           dS )	z9 this used to work, and was used in one of the tutorials r   )jitc                 x    t          t          |                     D ]}|t          j        d          z  | |<   d S )Nr   )r   lendecimalDecimal)r   r=   s     r   r   z3TestSetItem.test_conversion_setitem.<locals>.pyfunc  sC    s5zz** < <$ws';';;e< <r   zvoid(i8[:])r   rK   rq   N)numbarJ  r   r   copyr   )r   rn   rJ  r   r   r/  controls          r   test_conversion_setitemz#TestSetItem.test_conversion_setitem  s    	< 	< 	< #M""6**i4(((((**wc


W-----r   c                 @   t           }t          j        t          j        dd          }t          j        t          j        dd          }||t          j        t          j        t          j        f}t          |||          }|j        }d}t          j        |d          dz   d	d
|d
z
  ||dz   |dz   d| d
z   | | dz
  | dz
  g}	fd}
t          j
        |	|	          D ]^\  }}dD ]V}|||f}t          | } | |
            |         g|R  } | |
            |         g|R  }|                     ||           W_|                     t                    5   |t          j        t          j                  d	d	d           ddd           dS # 1 swxY w Y   dS )z+
        1d to 1d slice assignment
        r   rl   r   rm   ro   rL   rq   (   r   ru   rv   r0   c                  0    t          j         d          S )Nrp   rq   )r   r+  )r   s   r   	make_destz2TestSetItem.test_1d_slicing_set.<locals>.make_dest"  s    =D1111r   r   ru   ry   r0   N)rd   r   r   r   r   r   r   r   r   r   r   slicer   assertRaises
ValueErrorr+  )r   rn   r   	dest_typesrc_typer   r   r   Nr  rV  r   r   r   r   r=   pyleftcleftr   s                     @r   test_1d_slicing_setzTestSetItem.test_1d_slicing_set  s<    ( KQ44	;u{As33Xu{EKMffE:::i&&&+QAq!a%Qqb1fqb1"q&1"q&2	2 	2 	2 	2 	2$,VV<< 	7 	7KE4& 7 7dD(t		SZ?$???iikk3u:====''66667 z** 	D 	DE"-28444c1aCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   .FFFc                    t           }t          j        t          j        dd          }||t          j        t          j        t          j        f}t	          |||          }|j        }d}	t          |          }
t          j        |	t          j                  }|d|	 |
z   dz   df} ||	                                g|R  } ||	                                g|R  }| 
                    ||           |d|	 |
z   df}|                     t                    5 } ||	                                g|R   ddd           dS # 1 swxY w Y   dS )z9
        Generic sequence to 1d slice assignment
        r   rl   rm   ro   rq   N)rd   r   r   r   r   r   rL  r   r   rP  r   rY  rZ  )r   rn   seqtyseqr   r[  r   r   r   r]  kr   r   r   r3  raisess                   r   check_1d_slicing_set_sequencez)TestSetItem.check_1d_slicing_set_sequence0  s    (KQ44	UEKekJffE:::HHi***QQ
A&6#((**,t,,,eCHHJJ&&&&#...QQ"z** 	%fE#((**$t$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   D==EEc                 n    |                      |t          j        t          j        d          d           dS )z.
        Tuple to 1d slice assignment
        ru   )r   N)rf  r   UniTupler   r  s     r   test_1d_slicing_set_tuplez%TestSetItem.test_1d_slicing_set_tupleF  s;     	**5>%+q118	= 	= 	= 	= 	=r   c                 p    |                      |t          j        t          j                  ddg           dS )z-
        List to 1d slice assignment
        r   rh  N)rf  r   Listr   r  s     r   test_1d_slicing_set_listz$TestSetItem.test_1d_slicing_set_listM  s=     	**5:ek**QH	6 	6 	6 	6 	6r   c                 B   t           }t          j        t          j        dd          }|t          j        t          j        t          j        t          j        f}t          |||          }|j        }d}t          j        |d          }d}	dd	|d	z
  ||dz   |d
z   d| d	z   | | dz
  | d
z
  g}
t          j
        |
|
          D ]\\  }}dD ]T}|	|||f} ||                                g|R  } ||                                g|R  }|                     ||           U]dS )z/
        scalar to 1d slice assignment
        r   rl   rm   ro   rp   rq   *   r   ru   rv   r0   rW  N)rd   r   r   r   r   r   r   r   r   r   r   rP  r   )r   rn   r   r   r   r   r   r]  r   r.  r  r   r   r   r   r^  r_  s                    r   test_1d_slicing_broadcastz%TestSetItem.test_1d_slicing_broadcastT  sS    (KQ44	 U[%+u{EKPffE:::i&&&QAq!a%Qqb1fqb1"q&1"q&2$,VV<< 	7 	7KE4& 7 7E4-

2T222chhjj04000''6666	7	7 	7r   c                    t           }t          j        t          j        dd          }||t          j        t          j        f}t	          |||          }|j        }t          j        dd          }dD ]j} |t          j        |          |t          |          g|R  }	 |t          j        |          |t          |          g|R  }
| 
                    |	|
           kd S )Nr   rl   rm   ro   rp   rq   )r   )ru   r   )rf   r   r   r   r   r   r   r   r+  rX  r   )r   rn   r   r   r   r   r   r   testr^  r_  s              r   test_1d_slicing_addzTestSetItem.test_1d_slicing_addl  s    'KQ44	YU[AffE:::i$'''% 	3 	3DVBM#..E4L0AIDIIIFE"-,,c%,.?G$GGGE##FE2222	3 	3r   c                 <    |                      t                     d S r   )r`  r   r   s    r   test_1d_slicing_set_npmz#TestSetItem.test_1d_slicing_set_npmy        w /////r   c                 <    |                      t                     d S r   )rm  r   r   s    r   test_1d_slicing_set_list_npmz(TestSetItem.test_1d_slicing_set_list_npm|  r   r   c                 <    |                      t                     d S r   )rj  r   r   s    r   test_1d_slicing_set_tuple_npmz)TestSetItem.test_1d_slicing_set_tuple_npm  rA  r   c                 <    |                      t                     d S r   )rp  r   r   s    r   test_1d_slicing_broadcast_npmz)TestSetItem.test_1d_slicing_broadcast_npm  rA  r   c                 <    |                      t                     d S r   )rs  r   r   s    r   test_1d_slicing_add_npmz#TestSetItem.test_1d_slicing_add_npm  rv  r   c                    t           }t          j        t          j        dd          }||t          j        t          j        t          j        t          j        t          j        t          j        f}t	          |||          }|j        }t          j        dd                              dd          }g d}|D ]}	 |t          j	        |          |t          |	d	d
          t          |	d
d          f         g|	R  }
 |t          j	        |          |t          |	d	d
          t          |	d
d          f         g|	R  }|                     ||
           dS )z+
        2d to 2d slice assignment
        ru   r   rm   r   rp   rq   ro   )r   ro   r   r   ro   r   )ru   rv   r   ru   rv   r   )ro   r   r   ro   r   r   )r   ro   ry   r   ro   ry   )r   ro   ru   r   ro   ru   r   rv      N)rh   r   r   r   r   r   r   r   r   r+  rX  r   )r   rn   r   r   r   r   r   r   testsrr  r^  r_  s               r   test_2d_slicing_setzTestSetItem.test_2d_slicing_set  s]    (KQ44	YU[%++u{EK9ffE:::iT***222b99
 
 
  	3 	3DVBM#..E4!94EudSTUVSViGX4X0Ya\`aaaFE"-,,c%ac2CUDQRSTQTIEV2V.W_Z^___E##E62222	3 	3r   c                 ,   t           }t          j        t          j        dd          }|t          j        t          j        t          j        t          j        t          j        t          j        t          j        f}t          |||          }|j        }t          j        dd          	                    dd          }d}g d	}	|	D ]P}
 ||
                                |g|
R  } ||
                                |g|
R  }|                     ||           Qd
S )z/
        scalar to 2d slice assignment
        ru   rl   rm   r   rp   rq   ro   ro  r  N)rh   r   r   r   r   r   r   r   r   r   rP  r   )r   rn   r   r   r   r   r   r   r.  r  rr  r^  r_  s                r   test_2d_slicing_broadcastz%TestSetItem.test_2d_slicing_broadcast  s    (KQ44	 U[%+u{EK+u{EK9ffE:::iT***222b99
 
 
  	3 	3DVCHHJJ3d333FE#((**c1D111E##E62222	3 	3r   c                 <    |                      t                     d S r   )r  r   r   s    r   test_2d_slicing_set_npmz#TestSetItem.test_2d_slicing_set_npm  rv  r   c                 <    |                      t                     d S r   )r  r   r   s    r   test_2d_slicing_broadcast_npmz)TestSetItem.test_2d_slicing_broadcast_npm  rA  r   c                 L   t          j        d          }t          |dd           |                     |                                g d           t          |t          j        d                              t           j                  d           |                     |                                g d           t          j        d                              dd          }t          |dd           |                     |                                g d	g d
g dg           dS )z+
        scalar indexed assignment
        r   r   ro  )r   ro  ru   rv   r   rv   r   )r   ro  ru   r   r   r{   )r   r   ru   )ro  ro  ro  )r     r   N)	r   r   r`   r   tolistr   r   uint16r   )r   r  s     r   test_setitemzTestSetItem.test_setitem  s     illQ###'7'7'7888RXa[[//	::A>>>'7'7'7888ill""1a((Q###			<<<'KLLLLLr   c           	         t          j        d          }t          |d           |                     |                                dgdz             t          j        d                              dd          }t          |t          j        dd                     |                     |                                g dg dg           t          j        d                              dd          }t          |t          j        dd                              dd                     |                     |                                g dg dg           t          j        d	                              dddd          }t          |t          j        dd                              dd                     g dg dg}|                     |                                |ggdz             t          j        d          }t          |t          j        dd                              dd                     |                     |                                g d
           t          j        d                              dd          }t          |t          j        dd|j        z                                 dddd                     |                     |                                g dg dg           dS )z.
        broadcasted array assignment
        r   ro  r  ru   rv   r   r   )r   ru   rv   r
  )r   ru   rv   r   r   )r   r   r  N)r   r   rb   r   r  r   size)r   dstinner2s      r   test_setitem_broadcastz"TestSetItem.test_setitem_broadcast  s{   
 ill!#r***tax000ill""1a((!#ryA777			999'=>>>ill""1a((!#ryA'>'>q!'D'DEEE			999'=>>>imm##Aq!Q//!#ryA'>'>q!'D'DEEE))YYY'zA~666ill!#ryA'>'>q!'D'DEEE777ill""1a((!#ryAL'A'A'I'I!QPQST'U'UVVV			999'=>>>>>r   c                     t          j        d          }t          j        d                              dd          }|                     t                    5 }t          ||           d d d            n# 1 swxY w Y   t          |j                  }|                     d|           t          j        d                              dd          }t          j        d                              ddd          }|                     t                    5 }t          ||           d d d            n# 1 swxY w Y   t          |j                  }|                     d|           t          j        d                              dd          }t          j        d          }|                     t                    5 }t          ||           d d d            n# 1 swxY w Y   t          |j                  }|                     d|           d S )Nr   ro   ru   z,cannot broadcast source array for assignmentr   z0cannot assign slice from input of different sizer   )	r   r   r   rY  rZ  rb   str	exceptionr   )r   r  srcre  errmsgs        r   test_setitem_broadcast_errorz(TestSetItem.test_setitem_broadcast_error  s    illimm##Aq))z** 	0f%c3///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0V%&&G	! 	! 	! ill""1a((imm##Aq!,,z** 	0f%c3///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0V%&&K	! 	! 	! imm##Aq))illz** 	0f%c3///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0V%&&K	! 	! 	! 	! 	!s6   A44A8;A8D11D58D5<GG Gc                 4   t          j        d                              dd          }t          j        dd          }t          ||ddd           |                     |                                ddgddgddgg           t          j        d                              dd          }t          j        dd          }t          ||dd d           |                     |                                ddgddgddgg           t          j        d                              dd          }t          j        dd                              dd          }t          ||d dd           |                     |                                ddgddgddgg           d S )Nr  rv   ru   r   r   r   r   )r   r   r   rd   r   r  )r   r  r  s      r   test_slicing_1d_broadcastz%TestSetItem.test_slicing_1d_broadcast
  sq   ill""1a((i1oosCAq111AAA'?@@@ill""1a((i1oosCD!444AAA'?@@@ill""1a((i1oo%%a++sCq!444AAA'?@@@@@r   c                 4   t          j        d          }d|j        _        |                     t
          t          j        f          5 }t          |dd           d d d            n# 1 swxY w Y   | 	                    dt          |j                             d S )Nr   Fr   ro  z%Cannot modify readonly array of type:)r   r   rn   	writeablerY  	TypeErrorr	   TypingErrorr`   assertInr  r  )r   r  re  s      r   test_setitem_readonlyz!TestSetItem.test_setitem_readonly  s    ill#		6+=>?? 	(6CB'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(=&*++	- 	- 	- 	- 	-s   A%%A),A)N)rB  rC  rD  rE  rF  rR  r`  rf  rj  rm  rp  rs  ru  rx  rz  r|  r~  r  r  r  r  r  r  r  r  r  r   r   r   rH  rH    s        
 -? . . . .  ); D D D D>% % %, /A = = = = .@ 6 6 6 6 /A 7 7 7 70 ); 3 3 3 30 0 05 5 56 6 66 6 60 0 0 ); 3 3 3 30 /A 3 3 3 360 0 06 6 6M M M? ? ?<! ! !8A A A"- - - - -r   rH  c                       e Zd ZdZd ZdS )
TestTypingz3
    Check typing of basic indexing operations
    c                    t           j        }t          j        t          j        dd          }t          j        t          j        dd          }t          j        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          j	        |          }	 |||	          }
| 
                    t          |
j                  |           | 
                    |
j        j        |rdnd|           |                     |
j                   |D ]\  }}}t          j	        |          }	 |||	          }
| 
                    t          |
j                  |           | 
                    |
j        j        |rdnd|           |                     |
j                   |D ]\  }}}t          j	        |          }	 |||	          }
| 
                    t          |
j                  |           | 
                    |
j        j        d           |                     |
j                   dS )	zc
        Check an appropriate layout is inferred for the result of array
        indexing.
        rv   rl   r  r   )r   TTTFN)r   get_array_index_typer   r   float64r   r   r   r   Tupler   tupler=   resultlayoutr   advanced)r   funcctyftyatyr   index_tuplekeep_c_r=   rkeep_fs               r   test_layoutzTestTyping.test_layout)  s    -k%-C00k%-C00k%-C00 [$% WdE"^T5)K $.4 %/;'6K %/^UE* t,%ud3k+UE:T+UD9[2E5A%ue4T+UE: Hd$eU38[2E5AD+'u5HdK14?4'54415$?K'64'6D+'6G$L '. 	) 	)"KK,,ES%  AU17^^[999QX_V.Dcc(* * *QZ((((&- 	) 	)"KFK,,ES%  AU17^^[999QX_V.Dcc(* * *QZ((((!( 	) 	)KAK,,ES%  AU17^^[999QX_c222QZ((((	) 	)r   N)rB  rC  rD  rE  r  r   r   r   r  r  $  s2         G) G) G) G) G)r   r  __main__)<rM  r   numpyr   unittestnumba.core.compilerr   r   rO  r   r   
numba.corer   r   r	   numba.tests.supportr
   r   numba.core.typingr   numba.core.typesr   r   r   r   rF  enable_pyobjectr   nrtr   r$   r&   r(   r+   r-   r1   r3   r;   r>   rB   rD   rF   rH   rM   rO   rT   rV   rX   r[   r]   r`   rb   rd   rf   rh   rj   rH  r  rB  mainr   r   r   <module>r     sQ             7 7 7 7 7 7 7 7         + + + + + + + + + + - - - - - - - - ' ' ' ' ' ' E E E E E E E E E E E E UWW %)  "
%''                5 5 5( ( (                                  
\	6 \	6 \	6 \	6 \	6( \	6 \	6 \	6~f- f- f- f- f-( f- f- f-R	L) L) L) L) L) L) L) L)^ zHMOOOOO r   