
    shM                         S SK r S SKrS SKrS SKrS SKJrJrJr  S SK	J
r
  S SKJr  S SKJrJr  S rS rS rS	 r " S
 S\\5      r " S S\\5      r\S:X  a  \R.                  " 5         gg)    N)jittypeofnjit)types)TypingError)MemoryLeakMixinTestCasec                 
    X   $ N )abs     s/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_fancy_indexing.pygetitem_usecaser      s	    4K    c                     X U'   g r   r   )r   idxr   s      r   setitem_usecaser      s	    cFr   c                 .    [         R                  " X5      $ r   nptake)Aindicess     r   np_taker      s    771r   c                 ,    [         R                  " XUS9$ )Naxisr   )r   r   r   s      r   np_take_kwsr      s    771D))r   c                       \ rS rSrSS jrSS jrSS jrSS jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rSrg)TestFancyIndexing   c                     [         R                  " SUS-
  S/5      /nU(       a7  U[         R                  " SSUS-
  /5      [         R                  " / SQ5      /-  nU$ )Nr      )r   r$   r$   r   )r   int16uint16bool_)selfNmanychoicess       r   generate_advanced_indices+TestFancyIndexing.generate_advanced_indices   sU    88QArN+,		1aQ-0.0 0Gr   c           
   #   j  #    U(       aV  [        SSS5      [        SUS-
  S5      [        SSS5      [        US-
  SS5      [        U* S-   SS5      [        SU* S5      /nO[        SUS-
  S5      [        SU* S5      /n[        US-   5       H"  n[        R                  " XES9 H  nUv   M	     M$     g7f)z7
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_tuples-TestFancyIndexing.generate_basic_index_tuples"   s      T4.QAt,Qa(QUD"-aR!VR.R!R(G QAt,R!R(*G&1*%D ((>	 ? &s   B1B3c              #      #    [        U R                  XS95      n[        US-   5       H8  nU R                  XS-
  U5       H  nU H  nUSU U4-   XeS -   v   M     M     M:     g7f)zj
Generate advanced index tuples by generating basic index tuples
and adding a single advanced index item.
r+   r$   N)listr-   r4   r:   )r)   r*   r7   r+   r,   ir9   advs           r   generate_advanced_index_tuples0TestFancyIndexing.generate_advanced_index_tuples9   st      t55a5CDvz"A77A:tL"Cbq'SF*SW44 # M #s   A$A&c              #      #    U R                  XU5       H5  n[        [        U5      S-   5       H  nUSU [        4-   XES -   v   M     M7     g7f)zZ
Same as generate_advanced_index_tuples(), but also insert an
ellipsis at various points.
r$   N)rA   r4   lenEllipsis)r)   r*   r7   r+   r9   r?   s         r   ,generate_advanced_index_tuples_with_ellipsis>TestFancyIndexing.generate_advanced_index_tuples_with_ellipsisF   sR     
 66q$GC3s8a<("1g+c"g55 ) Hs   AAc                 (   [         n[        SS9" U5      nUR                  5       nUR                  =(       d    UnU H  nU" X5      nUR                  ULd   eU" X5      n	U R	                  U	R
                  UR
                  5        U R	                  U	R                  UR                  5        [        R                  R                  X5        U	R                  (       d  M  U	R                  S5        [        R                  R                  X5        M     g )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_indices'TestFancyIndexing.check_getitem_indicesO   s     T"6*xxzHHO	Ec)H ==	111#C SYY7SYY7JJ##C2xxx

''2 r   c                     SnSn[         R                  " X-  5      R                  U4U-  5      R                  [         R                  5      nU R                  X5      nU R                  X45        g N      )r   arangereshapeastypeint32rA   r]   r)   r*   r8   rU   r   s        r   test_getitem_tuple$TestFancyIndexing.test_getitem_tuplee   sZ    ii	"**A4$;7>>rxxH55a>""30r   c                     SnSn[         R                  " X-  5      R                  U4U-  5      R                  [         R                  5      nU R                  XSS9nU R                  X45        g Nra   rb   Fr=   )r   rc   rd   re   rf   rF   r]   rg   s        r   test_getitem_tuple_and_ellipsis1TestFancyIndexing.test_getitem_tuple_and_ellipsisn   h    ii	"**A4$;7>>rxxHCCAIN D P 	""30r   c                     [        SS9S 5       n[        R                  " S5      nU" US5        U R                  US   US   5        g )NTrI   c                     U S   U S'   g )N).r$   ).r   r   )rU   vs     r   foo7TestFancyIndexing.test_ellipsis_getsetitem.<locals>.fooz   s    f+CKr   r0   r$   r   )r   r   rc   rN   )r)   rr   rU   s      r   test_ellipsis_getsetitem*TestFancyIndexing.test_ellipsis_getsetitemx   sI    	d		& 
	& iilCQQ(r   c                     SnSn[         R                  " X-  5      R                  U4U-  5      R                  [         R                  5      nU R                  U5      nU R                  X45        g r`   )r   rc   rd   re   rf   r-   r]   rg   s        r   test_getitem_array$TestFancyIndexing.test_getitem_array   sZ    ii	"**A4$;7>>rxxH003""30r   c                    [         n[        SS9" U5      nU H  nX   n[        R                  " U5      n[        R                  " U5      nU" XuU5        U" XU5        U R	                  UR
                  UR
                  5        U R	                  UR                  UR                  5        [        R                  R                  X5        M     g )NTrI   )	r   r   r   
zeros_likerN   rO   rP   rQ   rR   )	r)   rU   r   rV   rW   rZ   srcr[   r\   s	            r   check_setitem_indices'TestFancyIndexing.check_setitem_indices   s     T"6*E*C}}S)H--$C8C(#c" SYY7SYY7JJ##C2 r   c                     SnSn[         R                  " X-  5      R                  U4U-  5      R                  [         R                  5      nU R                  X5      nU R                  X45        g r`   )r   rc   rd   re   rf   rA   r|   rg   s        r   test_setitem_tuple$TestFancyIndexing.test_setitem_tuple   sZ    ii	"**A4$;7>>rxxH55a>""30r   c                     SnSn[         R                  " X-  5      R                  U4U-  5      R                  [         R                  5      nU R                  XSS9nU R                  X45        g rk   )r   rc   rd   re   rf   rF   r|   rg   s        r   test_setitem_tuple_and_ellipsis1TestFancyIndexing.test_setitem_tuple_and_ellipsis   rn   r   c                     SnSn[         R                  " X-  5      R                  U4U-  5      R                  [         R                  5      S-   nU R                  U5      nU R                  X45        g )Nra   rb   
   )r   rc   rd   re   rf   r-   r|   rg   s        r   test_setitem_array$TestFancyIndexing.test_setitem_array   s_    ii	"**A4$;7>>rxxH2M003""30r   c                    [         n[        SS9" U5      n[        R                  " S5      [        R                  " S5      4[        R                  " S5      [        R                  " S5      4[        R                  " S[        R
                  S9[        R                  " S[        R
                  S94[        R                  " S[        R                  S9[        R                  " S[        R
                  S94[        R                  " SS	S9[        R                  " S
5      4[        R                  " SS	S9[        R                  " S5      4[        R                  " / SQS	S9[        R                  " SSS94[        R                  " S[        S9[        R                  " S[        S94/nU H:  u  pEUR                  5       nU" USU5        U" USU5        U R                  XF5        M<     g )NTrI   rb   gQ	@r0   rP   r$      z<U3abc)rb   r   )r   defghiWXYZz<U4y       @      @r   )
r   r   r   zerosarrayint64float64complexrL   assertPreciseEqual)r)   rV   rW   inpsx1rq   x2s          r   test_setitem_0d!TestFancyIndexing.test_setitem_0d   sO    T"6* XXa["((4.)XXa["((1+&XXarxx("((1BHH*EFXXarzz*BHHQbhh,GHXXau%rxx7XXd%("((3-8XX)7XXfE*,XXaw'$g)FG

 EBB2q!"aO##B+	 r   c                 &  ^ ^^ [         m[        SS9" T5      mUUU 4S jn/ nUR                  S5        UR                  [        R                  " / SQ5      5        UR                  [        R                  " S/S//S/S///5      5        UR                  / SQ5        UR                  S5        UR                  S	5        [        R
                  [        R                  4 H8  n[        R                  " S
US9R                  S5      nU H  nU" XE5        M     M:     / SQn[        R                  " / SQ5      nU" Xv5        WR                  nX* S-
  [        R                  " U5      [        R                  " U* S-
  5      U/U* S-
  //n	U	 H)  n
T R                  [        5         T" XJ5        S S S 5        M+     T R                  [        5         T" US/5        S S S 5        T R                  5         g ! , (       d  f       Mu  = f! , (       d  f       N1= f)NTrI   c                    > T" X5      nT" X5      nTR                  X#5        [        US5      (       a)  TR                  UR                  UR                  :H  5        g g )Norder)r   hasattrrN   r   )rU   indr[   r\   rW   rV   r)   s       r   check-TestFancyIndexing.test_np_take.<locals>.check   sQ    c'H/C##H2x))  399!<= *r   r$   )r$   r   r$      rb   r   r   r$   r   r$   )r   )r   rb   r0      r   )ra   rb   )r$   r0   ra   )r$   r0   rb   ra   r   g333333?)r   r   appendr   r   r   
complex128rc   rd   rS   assertRaises
IndexErrorr   disable_leak_check)r)   r   test_indicesdtr   r   r   r   szAillegal_indicesxrW   rV   s   `          @@r   test_np_takeTestFancyIndexing.test_np_take   s   T"6*	> ABHH%567BHHsQCjA3+%>?@,-I&3488R]]+B		"B'//7A#a $ , HH_%a ffq"((3-3$(9K5C4!8*. A"":.a /. !
 {+!cUO , 	! /. ,+s   "	G0H0
G?	
Hc           
         [         n[        SS9" U5      n[        R                  " S/ SQ5      nU" [        R
                  " / SQ/ SQ/ SQ/5      4[        R
                  " / SQ5      [        R
                  " / S	Q5      [        R
                  " S
/5      SSS4SS9U" [        R                  " S5      [        R
                  " S/5      4S
S[        R                  " S
/5      4SS9U" [        R                  " S5      4SSS94nU HN  u  pVnU HB  nU H9  n	U H0  n
[        R                  " XU
S9nU" XU
S9nU R                  X5        M2     M;     MD     MP     g )NTrI   inputs)arraysr   r   )r$   r0   rb   )ra   r      )      	   )r   r0   r$   )r$   r0   r$   r0   r$   r   r$   )r   )r   r$   )r   r$   r1   r   {   )r   r$   r   r$   r   r$      )r$   rb   r   r   )r   r   collections
namedtupler   r   rc   asarrayonesr   r   )r)   rV   rW   nttriplesr   r   r   r   indiceaxr[   r\   s                r   test_np_take_axis#TestFancyIndexing.test_np_take_axis   sR   T"6*##H.KL HHiI>? HHY'HH_-HHaSM   IIaLHHcUO
 JJsO
  GG56 7$
L &-!FT%F"#%775r#B#E;//> # &   &-r   c                 8   [        SS9" [        5      n[        R                  " S5      R	                  SS5      nSn[        R
                  " / SQ5      nU R                  [        U5         U" X$SS9  S S S 5        U R                  5         g ! , (       d  f       N= f)	NTrI   r   rb   z0axis 2 is out of bounds for array of dimension 2)r   r$   r0   r0   r   )	r   r   r   rc   rd   r   assertRaisesRegex
ValueErrorr   )r)   rW   rU   msgr   s        r   test_np_take_axis_exception-TestFancyIndexing.test_np_take_axis_exception4  st    T";/iil""1a(@((9%##J4#Q' 5 	! 54s   *B
Bc                    [         S 5       n[         S 5       n[        R                  " S5      R                  S5      n[	        S 5      [        R
                  4[        R
                  [	        S 5      4[	        S5      [        R
                  [        R                  " / SQ5      4[        R
                  [        R                  " / SQ5      [	        S 5      4[	        S5      [        [        R
                  [        R                  " / SQ5      4[        R                  " / SQ5      [        R
                  [        4[        R
                  [	        S5      [        R
                  [        R                  " / SQ5      4[        R                  " / SQ5      [        S [        R
                  4[        R
                  [	        S5      [        [        R
                  [        R                  " / SQ5      4[        R                  " / SQ5      [        R
                  [        R
                  [        4[        R
                  [        R                  " / SQ5      [        R
                  [        4[	        S5      [        R                  " / SQ5      [        R
                  S 4[        R
                  [        R                  " / SQ5      [        S 4/nUR                  nUnUR                  nUnU H  n	U" X95      n
U" X95      n[        R                  R                  X5        [        R                  " U5      nX9   nU" UR                  5       X5      n
U" UR                  5       X5      n[        R                  R                  X5        M     g )Nc                 
    X   $ r   r   )r   r   s     r   np_new_axis_getitem;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_getitem?  s	    6Mr   c                     X U'   U $ r   r   )r   r   items      r   np_new_axis_setitem;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_setitemC  s    cFHr   iH  )ra   r   r   r   r$   )r$   r0   r$   rb   )r   r   rc   rd   r3   newaxisr   rE   py_funcrQ   rR   rz   rL   )r)   r   r   r   	idx_casespyfunc_getitemcfunc_getitempyfunc_setitemcfunc_setitemr   r[   r\   a_emptyr   s                 r   test_newaxisTestFancyIndexing.test_newaxis>  s>   		 
	 
	 
	 IIm$,,\:4["**%ZZt%1Xrzz288I#67ZZ),eDk:1XxRXXi-@AXXi "**h7ZZq2::rxx	/BCXXi (D"**=ZZq8RZZ)9LMXXi "**bjj(CZZ),bjj(C1Xrxx	*BJJ=ZZ),h=
	 -44+,44+C%a-H'CJJ##H2mmA&G6D%gllnc@H:CJJ##H2 r   r   N)T)__name__
__module____qualname____firstlineno__r-   r:   rA   rF   r]   rh   rl   rt   rw   r|   r   r   r   r   r   r   r   r   __static_attributes__r   r   r   r!   r!      s^    .563,11)13 111,.2"h2?j"*3r   r!   c                   *  ^  \ rS rSrSr\" SS5      S\R                  " / SQ5      S4S\R                  " / SQ5      \" S5      \" S5      4\S\R                  " / SQ5      4\R                  " / SQ5      S\4\S\R                  " / SQ5      S\" SS5      4\R                  " / SQ5      S\\" SS5      4\" SS5      S\R                  " / S	Q5      S4S\R                  " / S
Q5      \" S5      \" S5      4/r	U 4S jr
S rS rS rS rS rS rSrU =r$ )TestFancyIndexingMultiDimik  )r   r   r   r   r   r   ra   r   rb   )r   r$   rb   ra   r0   r$   N)TFTFTFF)TFTFTFc                 j   > [         TU ]  5         [        R                  R	                  S5      U l        g )Nr$   )supersetUpr   randomdefault_rngrng)r)   	__class__s    r   r   TestFancyIndexingMultiDim.setUp  s"    99((+r   c                 `   [        U R                  5      n[        S S S 5      [        SUS-
  S 5      [        SS S5      [        US-
  S S5      [        U* S-   SS 5      [        SU* S5      [        SUS-
  S 5      [        SU* S5      /n[        [        R
                  " U5      5      n/ nSn[        U5       H  nU R                  R                  SSSS	9nU R                  R                  US
S	9R                  5       nU R                  R                  S
5      n	XxU	'   UR                  [        U5      5        M     [        U5       H  nU R                  R                  SSSS	9nU R                  R                  US
S	9R                  5       nU R                  R                  S
5      n	XxU	'   UR                  [        U5      5        M     [        U5       H  nU R                  R                  SSSS	9nU R                  R                  US
S	9R                  5       nU R                  R                  S
SSS9n	XxU	S   '   [        XS   '   UR                  [        U5      5        M     [        U5       H  nU R                  R                  SSSS	9nU R                  R                  US
S	9R                  5       nU R                  R                  S
5      n	U R                  U	   n
[        R                  " U R                  R                  SU
S	9[        S9X'   UR                  [        U5      5        M     U$ )Nr$   r   r0   r%   r1      r      rS   ra   F)rS   replacer   )minrO   r3   r>   r   rc   r4   r   integerschoicetolistr   tuplerE   r   bool)r)   r*   slice_choicesinteger_choicesr   K_	array_idxcurr_idx
_array_idxbool_arr_shapes              r   generate_random_indices1TestFancyIndexingMultiDim.generate_random_indices  s   

OtT40!QUD!!T1!a%r"1"q&"d#"qb"!QUD!"qb"
 ryy|, qA))!QR)8Ixx}1=DDFH+J#,Z NN5?+  qA))!QR)8IxxQ?FFHH+J#,Z NN5?+  qA))!QR)8Ixx}1=DDFH EBJ&/Z]#&.H]#NN5?+  qA))!QR)8Ixx}1=DDFH+J!ZZ
3N#%887$H  NN5?+  r   c                    [         S 5       n[        R                  R                  SSUS9nUR                  nUR
                  =(       d    UnU" XB5      nU" XB5      nU R                  UR
                  U5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        [        R                  R                  X5        U R                  [        R                  " X5      5        g )Nc                 
    X   $ r   r   )r   r   s     r   numba_get_itemGTestFancyIndexingMultiDim.check_getitem_indices.<locals>.numba_get_item  s
    :r   r   r   r   )r   r   r   randintr   rM   assertIsNotrN   rO   rP   rQ   rR   assertFalsemay_share_memory)	r)   	arr_shaperZ   r  rU   get_itemrY   r[   r\   s	            r   r]   /TestFancyIndexingMultiDim.check_getitem_indices  s    		 
	 ii2I6!))HHO	C'S(	2 	HNN3HNN3


. 	,,S;<r   c                    [         S 5       n[        R                  R                  SSUS9nXB   n[        R                  " U5      n[        R                  " U5      nUR                  XbU5        U" XrU5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        [        R                  R                  Xv5        g )Nc                     X U'   g r   r   )r   r   r   s      r   set_itemATestFancyIndexingMultiDim.check_setitem_indices.<locals>.set_item  s	    #Jr   r   r   r   )r   r   r   r  rz   r   rN   rO   rP   rQ   rR   )r)   r  rZ   r  rU   r{   r[   r\   s           r   r|   /TestFancyIndexingMultiDim.check_setitem_indices  s    		 
	 ii2I6j==%mmC #.S! 	HNN3HNN3


.r   c                     U R                   R                  5       nXR                  5       -  nU H7  nU R                  US9   U R	                  U R
                  U5        S S S 5        M9     g ! , (       d  f       MK  = fN)r   )indexing_casesrL   r   subTestr]   rO   r)   r   r   s      r   test_getitem&TestFancyIndexingMultiDim.test_getitem  d    %%**, 	//11C#&**4::s; '& &&   A++
A:	c                     U R                   R                  5       nXR                  5       -  nU H7  nU R                  US9   U R	                  U R
                  U5        S S S 5        M9     g ! , (       d  f       MK  = fr  )r  rL   r   r  r|   rO   r  s      r   test_setitem&TestFancyIndexingMultiDim.test_setitem  r  r  c           	         SSS[         R                  " SS/SS//5      44SSS[         R                  " SS/5      [         R                  " SS/5      44SS[         R                  " SS/5      [        S 5      SS44/nU Hd  u  p#U R                  [        5       nU R                  U R                  U5        S S S 5        U R                  U[        WR                  5      5        Mf     g ! , (       d  f       N8= f)	Nz,Multi-dimensional indices are not supported.r   rb   r$   r0   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.ra   )
r   r   r3   r   r   r]   rO   assertInstr	exception)r)   err_idx_caseserrr   raisess        r   %test_unsupported_condition_exceptions?TestFancyIndexingMultiDim.test_unsupported_condition_exceptions	  s     <BHHq!fq!f-./1 JBHHaV$bhh1v&679; 1a&!5;157
 &HC"";/6**4::s; 0MMF$$% &//s   C((
C6	)r   )r   r   r   r   rO   r3   r   r   rE   r  r   r   r]   r|   r  r  r"  r   __classcell__)r   s   @r   r   r   k  s     E 
q!a/2A6	
BHH[!5;a9 
1bhh{+,	+	8, 
1bhh{+Qa
;	+	8U1QZ8 
q!a	@	A	
	 
BHH<=	teAh	 #N*,>@=./(	<	< r   r   __main__)r   r5   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-     sn        # #  ) 9*O3 O3d
t tn zMMO r   