
    GJjL                         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	 d dl
mZmZ  G d dee      Z G d dee      Zed	k(  r ej                           yy)
    N)jitnjit)TypingError)MemoryLeakMixinTestCasec                   :   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d ej                  g dg dg d	g       ed       ed      fed ej                  g d      f ej                  g d      def ej                  g dg dg d	g      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j                  g dg dg d	g      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ej                  j                  d      Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestFancyIndexing            	   
      r      r      r   r      r   Nr   r   r   r   r   r   r   r   r   r   TFTFTFFTFTFTFc                    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 }t        d      D ]  }| j                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
      }|||<   |j                  t        |              t        d      D ]  }| j                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
      }|||<   |j                  t        |              t        d      D ]  }| j                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
dd      }|||d   <   t        ||d   <   |j                  t        |              t        d      D ]  }| j                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
      }| j                  |   }	t	        j                  | j                  j                  d|		      t              ||<   |j                  t        |              |S Nr   r   r      r      sizer   F)r!   replacedtypeminshapeslicelistnparangerangerngintegerschoicetolistappendtupleEllipsisarraybool)
selfNslice_choicesinteger_choicesindicesi	array_idxcurr_idx
_array_idxbool_arr_shapes
             i/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/numba/tests/test_fancy_indexing.pygenerate_random_indicesz)TestFancyIndexing.generate_random_indices-   s   

OtT40!QUD!!T1!a%r"1"q&"d#"qb"!QUD!"qb"
 ryy|, rA))!QR)8Ixx}1=DDFH+J#,HZ NN5?+  rA))!QR)8IxxQ?FFHH+J#,HZ NN5?+  rA))!QR)8Ixx}1=DDFH EBJ&/HZ]#&.HZ]#NN5?+  rA))!QR)8Ixx}1=DDFH+J!ZZ
3N#%887$HZ 
 NN5?+      c                 (   fd}t         j                  j                  dd|      }t        |      }|j	                         }|j
                  xs |} ||      } ||      }	|j
                  |usJ | j                  |	j                  |j                         | j                  |	j                  |j                         t         j                  j                  |	|       |	j                  d       t         j                  j                  ||       y )Nc                     |    S N )r4   idxindexs     r@   get_itemz9TestFancyIndexing.check_getitem_indices.<locals>.get_itemn   s    <rB   r   r   r    *   )r*   randomrandom_integersr   copybaseassertEqualr'   r$   testingassert_equalfill)
r6   	arr_shaperH   rI   arrget_item_numbaorig	orig_baseexpectedgots
     `       r@   check_getitem_indicesz'TestFancyIndexing.check_getitem_indicesm   s    	  ii''2I'>hxxzHHO	C'S%(}}I--- 	HNN3HNN3


X. 	


T*rB   c                    t         d        }t        j                  j                  dd|      }||   }t        j                  |      }t        j                  |      }|j                  |||        ||||       | j                  |j                  |j                         | j                  |j                  |j                         t        j                  j                  ||       y )Nc                     || |<   y rE   rF   r4   rG   items      r@   set_itemz9TestFancyIndexing.check_setitem_indices.<locals>.set_item       E#JrB   r   r   r    )r   r*   rK   rL   
zeros_likepy_funcrO   r'   r$   rP   rQ   r6   rS   rH   r_   rT   srcrX   rY   s           r@   check_setitem_indicesz'TestFancyIndexing.check_setitem_indices   s    		 
	 ii''2I'>%j==%mmC 5#.eS! 	HNN3HNN3


X.rB   c                     | j                   }|| j                         z  }|D ]9  }| j                  |      5  | j                  | j                  |       d d d        ; y # 1 sw Y   FxY wN)rG   )indexing_casesrA   subTestrZ   r'   r6   r:   rG   s      r@   test_getitemzTestFancyIndexing.test_getitem   ]    %% 	4//11C#&**4::s; '& &&   AA(	c                     | j                   }|| j                         z  }|D ]9  }| j                  |      5  | j                  | j                  |       d d d        ; y # 1 sw Y   FxY wrg   )rh   rA   ri   re   r'   rj   s      r@   test_setitemzTestFancyIndexing.test_setitem   rl   rm   c                    t         d        }|j                  }|}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 ];  \  }}|j                         } ||d|        ||d|       | j                  ||       = y )Nc                     || |<   y rE   rF   r]   s      r@   r_   z3TestFancyIndexing.test_setitem_0d.<locals>.set_item   r`   rB   r   gQ	@r   r#   r   r   z<U3abc)r   a)rr   defghiWXYZz<U4y       @      @r   )
r   rb   r*   zerosr4   int64float64complexrM   assertPreciseEqual)r6   r_   pyfunccfuncinpsx1vx2s           r@   test_setitem_0dz!TestFancyIndexing.test_setitem_0d   sc   		 
	 !! 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+	 rB   c                     t         d        }t        j                  d      } ||d       | j                  |d   |d          y )Nc                     | d   | d<   y )N).r   ).r   rF   )rT   r   s     r@   fooz7TestFancyIndexing.test_ellipsis_getsetitem.<locals>.foo   s    f+CKrB   r   r   r   )r   r*   r+   rO   )r6   r   rT   s      r@   test_ellipsis_getsetitemz*TestFancyIndexing.test_ellipsis_getsetitem   sD    		& 
	& iilCQQ(rB   c                     d }|t               fd}g }|j                  d       |j                  t        j                  g d             |j                  t        j                  dgdggdgdggg             |j                  g d       |j                  d       |j                  d       t        j                  t        j
                  fD ]8  }t        j                  d	|
      j                  d      }|D ]  } |||        : g d}t        j                  g d      } |||       j                  }	|	|	 dz
  t        j                  |	      t        j                  |	 dz
        |	g|	 dz
  gg}
|
D ])  } j                  t              5   ||       d d d        +  j                  t              5   |dg       d d d         j                          y # 1 sw Y   nxY w# 1 sw Y   &xY w)Nc                 .    t        j                  | |      S rE   r*   take)r4   r:   s     r@   np_takez/TestFancyIndexing.test_np_take.<locals>.np_take   s    775'**rB   c                      | |      } | |      }j                  ||       t        |d      r)j                  |j                  |j                  k(         y y )Norder)r{   hasattrrO   r   )rT   indrX   rY   r}   r|   r6   s       r@   checkz-TestFancyIndexing.test_np_take.<locals>.check   sT    c3'HS/C##Hc2x)  399!<= *rB   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   g333333?)r   r1   r*   r4   rx   
complex128r+   reshaper!   assertRaises
IndexErrorr   disable_leak_check)r6   r   r   test_indicesdtAr   r:   rs   szAillegal_indicesxr}   r|   s   `           @@r@   test_np_takezTestFancyIndexing.test_np_take   s   	+ V	> 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   
G%G1%G.	1G:c           	         d }|} 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 ]E  }	|D ]>  }
|D ]7  }t        j                  |	|
|      } ||	|
|      }| j                  ||       9 @ G R y )Nc                 2    t        j                  | ||      S Naxisr   r   r:   r   s      r@   np_take_kwsz8TestFancyIndexing.test_np_take_axis.<locals>.np_take_kws      771gD11rB   Tnopython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   )r   r   r   r   {   )r   r   r   r   r   r      )r   r   r   r   )
r   collections
namedtupler*   r4   r+   asarrayonesr   r{   )r6   r   r|   r}   nttriplesr   r:   r   r4   indiceaxrX   rY   s                 r@   test_np_take_axisz#TestFancyIndexing.test_np_take_axis
  sa   	2"T"6*##H.KL HHiI>? HHY'HH_-HHaSM   IIaLHHcUO
 JJsO
  GG56 7$
L &-!FGT%F"#%775&r#B#E6;//#> # &   &-rB   c                 6   d } t        d      |      }t        j                  d      j                  dd      }d}t        j                  g d      }| j                  t        |      5   |||d	       d d d        | j                          y # 1 sw Y   xY w)
Nc                 2    t        j                  | ||      S r   r   r   s      r@   r   zBTestFancyIndexing.test_np_take_axis_exception.<locals>.np_take_kwsB  r   rB   Tr   r   r   z0axis 2 is out of bounds for array of dimension 2)r   r   r   r   r   )r   r*   r+   r   r4   assertRaisesRegex
ValueErrorr   )r6   r   r}   rT   msgr:   s         r@   test_np_take_axis_exceptionz-TestFancyIndexing.test_np_take_axis_exceptionA  s}    	2"T";/iil""1a(@((9%##J4#wQ' 5 	! 54s   *BBc                    t         d        }t         d        }t        j                  d      j                  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                  j                  |
|       t        j                  |      }||	   } ||j                         |	|      }
 ||j                         |	|      }t        j                  j                  |
|        y )Nc                     | |   S rE   rF   )rs   rG   s     r@   np_new_axis_getitemz;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_getitemN  s    S6MrB   c                     || |<   | S rE   rF   )rs   rG   r^   s      r@   np_new_axis_setitemz;TestFancyIndexing.test_newaxis.<locals>.np_new_axis_setitemR  s    AcFHrB   iH  )r   r   r   r   r   )r   r   r   r   )r   r*   r+   r   r(   newaxisr4   r3   rb   rP   rQ   ra   rM   )r6   r   r   rs   	idx_casespyfunc_getitemcfunc_getitempyfunc_setitemcfunc_setitemrG   rX   rY   a_emptyr^   s                 r@   test_newaxiszTestFancyIndexing.test_newaxisM  sL   		 
	 
	 
	 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3'CJJ##Hc2mmA&GS6D%gllnc4@HT:CJJ##Hc2 rB   )__name__
__module____qualname__r'   r(   r*   r4   r3   rh   rK   default_rngr-   rA   rZ   re   rk   ro   r   r   r   r   r   r   rF   rB   r@   r	   r	      s     E 
q!a+.2	
HBHH[!5;a9	
HBHHk;<=	teAh	  
1hbhh{+,	+	8,	;[9	:	
H	 
1hbhh{+Qa
;	+	8U1QZ8	;[9	:	
HeAaj	" 
q!a	@	A	
	 
HBHH<=	teAh	 /N6 ))


"C>@+0/(	<	<,4)5"n4?n
"*3rB   r	   c                       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d ej                  g dg d
g dg       ej                  g dg d
g dg       ed      fd ej                  g dg d
g dg       ed       ej                  g dg d
g dg      f ej                  g dg d
g dg       ej                  g dg d
g dg      def ej                  g dg d
g dg      de ej                  g dg d
g dg      fgZ fdZ	d Z
d Zd Zd Zd Z xZS )TestFancyIndexingMultiDimr
   r   r   r   r   r   Nr   r   r   r   c                 j    t         |           t        j                  j	                  d      | _        y )Nr   )supersetUpr*   rK   r   r-   )r6   	__class__s    r@   r   zTestFancyIndexingMultiDim.setUp  s"    99((+rB   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                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
      }	|||	<   |j                  t        |              t        |      D ]  }| j                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
      }	|||	<   |j                  t        |              t        |      D ]  }| j                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
dd      }	|||	d   <   t        ||	d   <   |j                  t        |              t        |      D ]  }| j                  j                  ddd	      }| j                  j                  |d
	      j                         }| j                  j                  d
      }	| j                  |	   }
t	        j                  | j                  j                  d|
	      t              ||	<   |j                  t        |              |S r   r%   )r6   r7   r8   r9   r:   K_r<   r=   r>   r?   s              r@   rA   z1TestFancyIndexingMultiDim.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#,HZ NN5?+  qA))!QR)8IxxQ?FFHH+J#,HZ NN5?+  qA))!QR)8Ixx}1=DDFH EBJ&/HZ]#&.HZ]#NN5?+  qA))!QR)8Ixx}1=DDFH+J!ZZ
3N#%887$HZ  NN5?+  rB   c                    t         d        }t        j                  j                  dd|      }|j                  }|j
                  xs |} |||      } |||      }| j                  |j
                  |       | j                  |j                  |j                         | j                  |j                  |j                         t        j                  j                  ||       | j                  t        j                  ||             y )Nc                     | |   S rE   rF   )r4   rG   s     r@   numba_get_itemzGTestFancyIndexingMultiDim.check_getitem_indices.<locals>.numba_get_item  s    :rB   r   r   r    )r   r*   rK   randintrb   rN   assertIsNotrO   r'   r$   rP   rQ   assertFalsemay_share_memory)	r6   rS   rH   r   rT   rI   rW   rX   rY   s	            r@   rZ   z/TestFancyIndexingMultiDim.check_getitem_indices  s    		 
	 ii2I6!))HHO	C'S%(	2 	HNN3HNN3


X. 	,,S(;<rB   c                    t         d        }t        j                  j                  dd|      }||   }t        j                  |      }t        j                  |      }|j                  |||        ||||       | j                  |j                  |j                         | j                  |j                  |j                         t        j                  j                  ||       y )Nc                     || |<   y rE   rF   r]   s      r@   r_   zATestFancyIndexingMultiDim.check_setitem_indices.<locals>.set_item  r`   rB   r   r   r    )r   r*   rK   r   ra   rb   rO   r'   r$   rP   rQ   rc   s           r@   re   z/TestFancyIndexingMultiDim.check_setitem_indices  s    		 
	 ii2I6%j==%mmC 5#.eS! 	HNN3HNN3


X.rB   c                     | j                   j                         }|| j                         z  }|D ]9  }| j                  |      5  | j	                  | j
                  |       d d d        ; y # 1 sw Y   FxY wrg   )rh   rM   rA   ri   rZ   r'   rj   s      r@   rk   z&TestFancyIndexingMultiDim.test_getitem  f    %%**, 	4//11C#&**4::s; '& &&   A--A6	c                     | j                   j                         }|| j                         z  }|D ]9  }| j                  |      5  | j	                  | j
                  |       d d d        ; y # 1 sw Y   FxY wrg   )rh   rM   rA   ri   re   r'   rj   s      r@   ro   z&TestFancyIndexingMultiDim.test_setitem  r   r   )r   r   r   r'   r(   r*   r4   r3   rh   r   rA   rZ   re   rk   ro   __classcell__)r   s   @r@   r   r   z  s     E 
q!a/2A6	
HBHH[!5;a9 
1hbhh{+,	+	8, 
1hbhh{+Qa
;	+	8U1QZ8 
q!a	@	A	
	 
HBHH<=	teAh	  
HBHHk;<=xrxxVacnHo?prwx|r}~	
HBHHk;<=uT{HBHHVacnp{U|L}~	;[9	:HBHHkS^`kEl<moprz{	;[9	:AxS^`kmxRyIz{1N6,>@=./(	<	<rB   r   __main__)r   	itertoolsnumpyr*   unittestnumbar   r   numba.core.errorsr   numba.tests.supportr   r   r	   r   r   mainrF   rB   r@   <module>r      sV         ) 9k3 k3\b< b<H zHMMO rB   