
    J/PhM                         d dl Z d dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZ d Zd Zd Zd	 Z G d
 dee          Z G d dee          Zedk    r ej                     dS dS )    N)jittypeofnjit)types)TypingError)MemoryLeakMixinTestCasec                     | |         S N )abs     _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_fancy_indexing.pygetitem_usecaser      s    Q4K    c                     || |<   d S r   r   )r   idxr   s      r   setitem_usecaser      s    AcFFFr   c                 ,    t          j        | |          S r   nptake)Aindicess     r   np_taker      s    71gr   c                 0    t          j        | ||          S )Naxisr   )r   r   r   s      r   np_take_kwsr      s    71gD))))r   c                       e Zd ZddZddZddZd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S )TestFancyIndexingTc                     t          j        d|dz
  dg          g}|r3|t          j        dd|dz
  g          t          j        g d          gz  }|S )Nr      )r   r#   r#   r   )r   int16uint16bool_)selfNmanychoicess       r   generate_advanced_indicesz+TestFancyIndexing.generate_advanced_indices   sa    8QArN++, 	0	1aQ-00..0 0Gr   c           
   #     K   |rnt          ddd          t          d|dz
  d          t          ddd          t          |dz
  dd          t          | dz   dd          t          d| d          g}n&t          d|dz
  d          t          d| d          g}t          |dz             D ]}t          j        ||          D ]}|V   dS )zG
        Generate basic index tuples with 0 to *maxdim* items.
        Nr#   r      r$   )repeat)slicerange	itertoolsproduct)r(   r)   maxdimr*   r+   ndimtups          r   generate_basic_index_tuplesz-TestFancyIndexing.generate_basic_index_tuples"   s       
	*T4..QAt,,Qa((QUD"--aR!VR..R!R((GG QAt,,R!R((*G&1*%% 	 	D (>>>  					 	r   c              #      K   t          |                     ||                    }t          |dz             D ]?}|                     ||dz
  |          D ]"}|D ]}|d|         |fz   ||d         z   V  #@dS )z
        Generate advanced index tuples by generating basic index tuples
        and adding a single advanced index item.
        r*   r#   N)listr,   r2   r8   )r(   r)   r5   r*   r+   ir7   advs           r   generate_advanced_index_tuplesz0TestFancyIndexing.generate_advanced_index_tuples9   s       t55ad5CCDDvz"" 	5 	5A776A:tLL 5 5" 5 5Cbqb'SF*SW4444455	5 	5r   c              #      K   |                      |||          D ]D}t          t          |          dz             D ]"}|d|         t          fz   ||d         z   V  #EdS )zr
        Same as generate_advanced_index_tuples(), but also insert an
        ellipsis at various points.
        r#   N)r>   r2   lenEllipsis)r(   r)   r5   r*   r7   r<   s         r   ,generate_advanced_index_tuples_with_ellipsisz>TestFancyIndexing.generate_advanced_index_tuples_with_ellipsisF   s      
 66q&$GG 	6 	6C3s88a<(( 6 6"1"g+c!""g555556	6 	6r   c                    t           } t          d          |          }|                                }|j        p|}|D ]} |||          }|j        |usJ  |||          }	|                     |	j        |j                   |                     |	j        |j                   t          j        	                    |	|           |	j
        r5|	                    d           t          j        	                    ||           d S )NTnopython*   )r   r   copybaseassertEqualshapedtyper   testingassert_equalsizefill)
r(   arrr   pyfunccfuncorig	orig_baseindexexpectedgots
             r   check_getitem_indicesz'TestFancyIndexing.check_getitem_indicesO   s	    "T"""6**xxzzHO	 	3 	3Evc5))H =	1111%U##C SY777SY777J##C222x 3
''T222	3 	3r   c                     d}d}t          j        ||z                                |f|z                                t           j                  }|                     ||          }|                     ||           d S N      )r   arangereshapeastypeint32r>   rX   r(   r)   r6   rP   r   s        r   test_getitem_tuplez$TestFancyIndexing.test_getitem_tuplee   st    iT	""**A4$;77>>rxHH55a>>""300000r   c                     d}d}t          j        ||z                                |f|z                                t           j                  }|                     ||d          }|                     ||           d S Nr[   r\   Fr:   )r   r]   r^   r_   r`   rB   rX   ra   s        r   test_getitem_tuple_and_ellipsisz1TestFancyIndexing.test_getitem_tuple_and_ellipsisn       iT	""**A4$;77>>rxHHCCAtIN D P P 	""300000r   c                     t          d          d             }t          j        d          } ||d           |                     |d         |d                    d S )NTrD   c                     | d         | d<   d S )N).r#   ).r   r   )rP   vs     r   fooz7TestFancyIndexing.test_ellipsis_getsetitem.<locals>.fooz   s    f+CKKKr   r.   r#   r   )r   r   r]   rI   )r(   rj   rP   s      r   test_ellipsis_getsetitemz*TestFancyIndexing.test_ellipsis_getsetitemx   si    	d				& 	& 
		& illCQQ(((((r   c                     d}d}t          j        ||z                                |f|z                                t           j                  }|                     |          }|                     ||           d S rZ   )r   r]   r^   r_   r`   r,   rX   ra   s        r   test_getitem_arrayz$TestFancyIndexing.test_getitem_array   sr    iT	""**A4$;77>>rxHH0033""300000r   c                    t           } t          d          |          }|D ]}||         }t          j        |          }t          j        |          } ||||            ||||           |                     |j        |j                   |                     |j        |j                   t          j                            ||           d S )NTrD   )	r   r   r   
zeros_likerI   rJ   rK   rL   rM   )	r(   rP   r   rQ   rR   rU   srcrV   rW   s	            r   check_setitem_indicesz'TestFancyIndexing.check_setitem_indices   s     "T"""6** 
	3 
	3Ee*C}S))H-$$CF8UC(((E#uc""" SY777SY777J##C2222
	3 
	3r   c                     d}d}t          j        ||z                                |f|z                                t           j                  }|                     ||          }|                     ||           d S rZ   )r   r]   r^   r_   r`   r>   rq   ra   s        r   test_setitem_tuplez$TestFancyIndexing.test_setitem_tuple   st    iT	""**A4$;77>>rxHH55a>>""300000r   c                     d}d}t          j        ||z                                |f|z                                t           j                  }|                     ||d          }|                     ||           d S rd   )r   r]   r^   r_   r`   rB   rq   ra   s        r   test_setitem_tuple_and_ellipsisz1TestFancyIndexing.test_setitem_tuple_and_ellipsis   rf   r   c                     d}d}t          j        ||z                                |f|z                                t           j                  dz   }|                     |          }|                     ||           d S )Nr[   r\   
   )r   r]   r^   r_   r`   r,   rq   ra   s        r   test_setitem_arrayz$TestFancyIndexing.test_setitem_array   sw    iT	""**A4$;77>>rxHH2M0033""300000r   c                    t           } t          d          |          }t          j        d          t          j        d          ft          j        d          t          j        d          ft          j        dt          j                  t          j        dt          j                  ft          j        dt          j                  t          j        dt          j                  ft          j        dd	          t          j        d
          ft          j        dd	          t          j        d          ft          j        g dd	          t          j        dd          ft          j        dt                    t          j        dt                    fg}|D ]I\  }}|                                } ||d|            ||d|           | 	                    ||           Jd S )NTrD   r\   gQ	@r.   rK   r#      z<U3abc)r\   r   )r|   defghiWXYZz<U4y       @      @r   )
r   r   r   zerosarrayint64float64complexrG   assertPreciseEqual)r(   rQ   rR   inpsx1ri   x2s          r   test_setitem_0dz!TestFancyIndexing.test_setitem_0d   s    "T"""6** Xa[["(4..)Xa[["(1++&Xarx((("(1BH*E*E*EFXarz***BHQbh,G,G,GHXau%%%rx7Xd%((("(3--8X)))777XfE***,Xaw'''$g)F)F)FG

  	, 	,EBBF2q!E"aOOO##B++++		, 	,r   c                 b    t            t          d                     fd}g }|                    d           |                    t          j        g d                     |                    t          j        dgdggdgdggg                     |                    g d           |                    d           |                    d	           t          j        t          j        fD ]<}t          j        d
|                              d          }|D ]} |||           =g d}t          j        g d          } |||           |j	        }|| dz
  t          j        |          t          j        | dz
            |g| dz
  gg}	|	D ]@}
 
                    t                    5   ||
           d d d            n# 1 swxY w Y   A 
                    t                    5   |dg           d d d            n# 1 swxY w Y                                     d S )NTrD   c                      | |          } | |          }                     ||           t          |d          r%                    |j        |j        k               d S d S )Norder)r   hasattrrI   r   )rP   indrV   rW   rR   rQ   r(   s       r   checkz-TestFancyIndexing.test_np_take.<locals>.check   sx    vc3''H%S//C##Hc222x)) >  39!<=====> >r   r#   )r#   r{   r#      r\   r{   r   r#   r{   r#   )r   )r   r\   r.      rz   )r[   r\   )r#   r.   r[   )r#   r.   r\   r[   r{   g333333?)r   r   appendr   r   r   
complex128r]   r^   rN   assertRaises
IndexErrorr   disable_leak_check)r(   r   test_indicesdtr   r   r   r   szAillegal_indicesxrR   rQ   s   `          @@r   test_np_takezTestFancyIndexing.test_np_take   s   "T"""6**	> 	> 	> 	> 	> 	> 	> ABH%5%5%566777BHsQCjA3+%>??@@@,,,---I&&&34448R]+ 	 	B	"B'''//77A#  a ))H___%%a fq"(3--3$(9K9K5C4!8*.  	 	A"":..  a               {++ 	 	E!cUOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!!!!!s$   7GG	G	6HHHc           	         t           } t          d          |          }t          j        dg d          } |t	          j        g dg dg dg          ft	          j        g d          t	          j        g d	          t	          j        d
g          dddfd           |t	          j        d          t	          j        dg          fd
dt	          j        d
g          fd           |t	          j        d          fdd          f}|D ]P\  }}}|D ]G}|D ]B}	|D ]=}
t	          j	        ||	|
          } |||	|
          }| 
                    ||           >CHQd S )NTrD   inputs)arraysr   r   )r#   r.   r\   )r[   r{      )      	   )r   r.   r#   )r#   r.   r#   r.   r#   r   r#   )r   )r   r#   )r   r#   r/   r{   {   )rw   r#   r   r#   r   r#      )r#   r\   r{   r   )r   r   collections
namedtupler   r   r]   asarrayonesr   r   )r(   rQ   rR   nttriplesr   r   r   r   indiceaxrV   rW   s                r   test_np_take_axisz#TestFancyIndexing.test_np_take_axis   s   "T"""6**#H.K.K.KLL BHiiiIII>?? HYYY''H___--HaSMM     BIaLLHcUOO
 JsOO
    BG566   7$
L &- 	? 	?!FGT ? ?% ? ?F" ? ?#%75&r#B#B#B#eE6;;;//#>>>>???	? 	?r   c                 l    t          d          t                    }t          j        d                              dd          }d}t          j        g d          }|                     t          |          5   |||d           d d d            n# 1 swxY w Y   |                                  d S )	NTrD   r   r\   z0axis 2 is out of bounds for array of dimension 2)r   r#   r.   r.   r   )	r   r   r   r]   r^   r   assertRaisesRegex
ValueErrorr   )r(   rR   rP   msgr   s        r   test_np_take_axis_exceptionz-TestFancyIndexing.test_np_take_axis_exception4  s    "T""";//ill""1a((@(999%%##J44 	( 	(E#wQ''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	!!!!!s   :BBBc                    t           d             }t           d             }t          j        d                              d          }t	          d           t          j        ft          j        t	          d           ft	          d          t          j        t          j        g d          ft          j        t          j        g d          t	          d           ft	          d          t          t          j        t          j        g d          ft          j        g d          t          j        t          ft          j        t	          d          t          j        t          j        g d          ft          j        g d          t          d t          j        ft          j        t	          d          t          t          j        t          j        g d          ft          j        g d          t          j        t          j        t          ft          j        t          j        g d          t          j        t          ft	          d          t          j        g d          t          j        d ft          j        t          j        g d          t          d fg}|j        }|}|j        }|}|D ]}	 |||	          }
 |||	          }t          j	        
                    |
|           t          j        |          }||	         } ||                                |	|          }
 ||                                |	|          }t          j	        
                    |
|           d S )Nc                     | |         S r   r   )r   r   s     r   np_new_axis_getitemz;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_getitem?  s    S6Mr   c                     || |<   | S r   r   )r   r   items      r   np_new_axis_setitemz;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_setitemC  s    AcFHr   iH  )r[   r{   r   r   r#   )r#   r.   r#   r\   )r   r   r]   r^   r1   newaxisr   rA   py_funcrL   rM   ro   rG   )r(   r   r   r   	idx_casespyfunc_getitemcfunc_getitempyfunc_setitemcfunc_setitemr   rV   rW   a_emptyr   s                 r   test_newaxiszTestFancyIndexing.test_newaxis>  s   		 	 
	 
	 	 
	 Im$$,,\::4[["*%Zt%1XXrz28III#6#67Z))),,eDkk:1XXxRXiii-@-@AXiii  "*h7Zq2:rx			/B/BCXiii  (D"*=Zq8RZ)))9L9LMXiii  "*bj(CZ))),,bj(C1XXrx			**BJ=Z))),,h=
	 -4+,4+ 
	3 
	3C%~a--H-3''CJ##Hc222mA&&GS6D%~gllnnc4@@H-T::CJ##Hc2222
	3 
	3r   N)T)__name__
__module____qualname__r,   r8   r>   rB   rX   rb   re   rk   rm   rq   rs   ru   rx   r   r   r   r   r   r   r   r   r!   r!      s8             .5 5 5 56 6 6 63 3 3,1 1 11 1 1) ) )1 1 13 3 3 1 1 11 1 11 1 1, , ,.2" 2" 2"h2? 2? 2?j" " "*3 *3 *3 *3 *3r   r!   c                   0    e Zd ZdZ edd          d ej        g d          dfd ej        g d           ed           ed          fed ej        g d          f ej        g d          defed ej        g d          d edd          f ej        g d          de edd          f edd          d ej        g d          dfd ej        g d	           ed           ed          fgZ fd
Z	d Z
d Zd Zd Zd Zd Z xZS )TestFancyIndexingMultiDim)r{   r   r   r   r   rw   r[   r{   r\   )r   r#   r\   r[   r.   r#   N)TFTFTFF)TFTFTFc                     t                                                       t          j                            d          | _        d S )Nr#   )supersetUpr   randomdefault_rngrng)r(   	__class__s    r   r   zTestFancyIndexingMultiDim.setUp  s/    9((++r   c                 <   t          | j                  }t          d d d           t          d|dz
  d           t          dd d          t          |dz
  d d          t          | dz   dd           t          d| d          t          d|dz
  d           t          d| d          g}t          t	          j        |                    }g }d}t          |          D ]}| j                            ddd	          }| j        	                    |d
	          
                                }| j        	                    d
          }	|||	<   |                    t          |                     t          |          D ]}| j                            ddd	          }| j        	                    |d
	          
                                }| j        	                    d
          }	|||	<   |                    t          |                     t          |          D ]}| j                            ddd	          }| j        	                    |d
	          
                                }| j        	                    d
dd          }	|||	d         <   t          ||	d         <   |                    t          |                     t          |          D ]}| j                            ddd	          }| j        	                    |d
	          
                                }| j        	                    d
          }	| j        |	         }
t	          j        | j        	                    d|
	          t                    ||	<   |                    t          |                     |S )Nr#   r   r.   r$   r/      r{      rN   r[   F)rN   replacerz   )minrJ   r1   r;   r   r]   r2   r   integerschoicetolistr   tuplerA   r   bool)r(   r)   slice_choicesinteger_choicesr   K_	array_idxcurr_idx
_array_idxbool_arr_shapes              r   generate_random_indicesz1TestFancyIndexingMultiDim.generate_random_indices  sQ   
OOtT400!QUD!!!T1!a%r""1"q&"d##"qb"!QUD!!"qb"
 ry||,, q 	, 	,A))!QR)88Ix}1==DDFFH++J#,HZ NN5??++++q 	, 	,A))!QR)88IxQ??FFHHH++J#,HZ NN5??++++ q 		, 		,A))!QR)88Ix}1==DDFFH EBBJ&/HZ]#&.HZ]#NN5??++++ q 	, 	,A))!QR)88Ix}1==DDFFH++J!Z
3N#%877$ $ $HZ  NN5??++++r   c                     t           d             }t          j                            dd|          }|j        }|j        p|} |||          } |||          }|                     |j        |           |                     |j        |j                   |                     |j	        |j	                   t          j
                            ||           |                     t          j        ||                     d S )Nc                     | |         S r   r   )r   r   s     r   numba_get_itemzGTestFancyIndexingMultiDim.check_getitem_indices.<locals>.numba_get_item  s    :r   r   r   r   )r   r   r   randintr   rH   assertIsNotrI   rJ   rK   rL   rM   assertFalsemay_share_memory)	r(   	arr_shaperU   r   rP   get_itemrT   rV   rW   s	            r   rX   z/TestFancyIndexingMultiDim.check_getitem_indices  s    		 	 
	 i2I66!)HO	8C''nS%((	222 	HN333HN333

X... 	,S(;;<<<<<r   c                    t           d             }t          j                            dd|          }||         }t          j        |          }t          j        |          }|                    |||            ||||           |                     |j        |j                   |                     |j        |j                   t          j	        
                    ||           d S )Nc                     || |<   d S r   r   )r   r   r   s      r   set_itemzATestFancyIndexingMultiDim.check_setitem_indices.<locals>.set_item  s    E#JJJr   r   r   r   )r   r   r   r   ro   r   rI   rJ   rK   rL   rM   )r(   r   rU   r   rP   rp   rV   rW   s           r   rq   z/TestFancyIndexingMultiDim.check_setitem_indices  s    		 	 
	 i2I66%j=%%mC  5#...eS!!! 	HN333HN333

X.....r   c                    | j                                         }||                                 z  }|D ]K}|                     |          5  |                     | j        |           d d d            n# 1 swxY w Y   Ld S N)r   )indexing_casesrG   r   subTestrX   rJ   r(   r   r   s      r   test_getitemz&TestFancyIndexingMultiDim.test_getitem      %**,, 	4//111 	< 	<C#&& < <**4:s;;;< < < < < < < < < < < < < < <	< 	<   A33A7	:A7	c                    | j                                         }||                                 z  }|D ]K}|                     |          5  |                     | j        |           d d d            n# 1 swxY w Y   Ld S r   )r   rG   r   r   rq   rJ   r   s      r   test_setitemz&TestFancyIndexingMultiDim.test_setitem  r   r   c           	         dddt          j        ddgddgg          ffdddt          j        ddg          t          j        ddg          ffddt          j        ddg          t          d           ddffg}|D ]z\  }}|                     t                    5 }|                     | j        |           d d d            n# 1 swxY w Y   |                     |t          |j	                             {d S )	Nz,Multi-dimensional indices are not supported.r   r\   r#   r.   z:Using more than one non-scalar array index is unsupported.zUsing more than one indexing subspace is unsupported. An indexing subspace is a group of one or more consecutive indices comprising integer or array types.r[   )
r   r   r1   r   r   rX   rJ   assertInstr	exception)r(   err_idx_caseserrr   raisess        r   %test_unsupported_condition_exceptionsz?TestFancyIndexingMultiDim.test_unsupported_condition_exceptions	  s^    <BHq!fq!f-../1 JBHaV$$bh1v&6&679; 1a&!!5;;157
 & 	 	HC"";// <6**4:s;;;< < < < < < < < < < < < < < <MMF$%%   	 	s   CC		C	)r   r   r   rJ   r1   r   r   rA   r   r   r   rX   rq   r   r   r  __classcell__)r   s   @r   r   r   k  s         E 
q!a///22A6	
HBH[[[!!55;;a9 
1hbh{{{++,	+++		8, 
1hbh{{{++Qa

;	+++		8UU1QZZ8 
q!a	@@@	A	A	
	 
HBH<<<==	teeAhh	 #N*, , , , ,> > >@= = =./ / /(	< 	< 	<	< 	< 	<      r   r   __main__)r   r3   numpyr   unittestnumbar   r   r   
numba.corer   numba.core.errorsr   numba.tests.supportr   r	   r   r   r   r   r!   r   r   mainr   r   r   <module>r     sX                # # # # # # # # # #       ) ) ) ) ) ) 9 9 9 9 9 9 9 9      * * *O3 O3 O3 O3 O3 O3 O3 O3d
t t t t t t t tn zHMOOOOO r   