
    xKg9F                         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,                          yy)    N)jittypeofnjit)types)TypingError)MemoryLeakMixinTestCasec                     | |   S N )abs     c/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_fancy_indexing.pygetitem_usecaser      s    Q4K    c                     || |<   y r   r   )r   idxr   s      r   setitem_usecaser      s    AcFr   c                 .    t        j                  | |      S r   nptake)Aindicess     r   np_taker      s    771gr   c                 2    t        j                  | ||      S )Naxisr   )r   r   r   s      r   np_take_kwsr      s    771gD))r   c                   t    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y)TestFancyIndexingc                     t        j                  d|dz
  dg      g}|r5|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   sU    88QArN+,		1aQ-0.0 0Gr   c           
   #   ^  K   |rVt        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 ]  }|  $ yw)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(G QAt,R!R(*G&1*%D ((>	 ? &s   B+B-c              #      K   t        | j                  ||            }t        |dz         D ]5  }| j                  ||dz
  |      D ]  }|D ]  }|d| |fz   ||d z      7 yw)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_tuples8   s{      t55ad5CDvz"A776A:tL"Cbq'SF*SW44 # M #s   A$A&c              #      K   | j                  |||      D ]3  }t        t        |      dz         D ]  }|d| t        fz   ||d z     5 yw)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_ellipsisE   sW     
 66q&$GC3s8a<("1g+c!"g55 ) Hs   AAc                    t         } t        d      |      }|j                         }|j                  xs |}|D ]  } |||      }|j                  |usJ  |||      }	| j	                  |	j
                  |j
                         | j	                  |	j                  |j                         t        j                  j                  |	|       |	j                  s|	j                  d       t        j                  j                  ||        y )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_indicesN   s     "T"6*xxzHHO	Ec5)H ==	111U#C SYY7SYY7JJ##C2xx

''T2 r   c                     d}d}t        j                  ||z        j                  |f|z        j                  t         j                        }| j                  ||      }| j                  ||       y N      )r   arangereshapeastypeint32r>   rX   r(   r)   r6   rP   r   s        r   test_getitem_tuplez$TestFancyIndexing.test_getitem_tupled   s`    iiT	"**A4$;7>>rxxH55a>""30r   c                     d}d}t        j                  ||z        j                  |f|z        j                  t         j                        }| j                  ||d      }| j                  ||       y Nr[   r\   Fr:   )r   r]   r^   r_   r`   rB   rX   ra   s        r   test_getitem_tuple_and_ellipsisz1TestFancyIndexing.test_getitem_tuple_and_ellipsism   n    iiT	"**A4$;7>>rxxHCCAtIN D P 	""30r   c                     t        d      d        }t        j                  d      } ||d       | j                  |d   |d          y )NTrD   c                     | d   | d<   y )N).r#   ).r   r   )rP   vs     r   fooz7TestFancyIndexing.test_ellipsis_getsetitem.<locals>.fooy   s    f+CKr   r.   r#   r   )r   r   r]   rI   )r(   rj   rP   s      r   test_ellipsis_getsetitemz*TestFancyIndexing.test_ellipsis_getsetitemw   sI    	d		& 
	& iilCQQ(r   c                     d}d}t        j                  ||z        j                  |f|z        j                  t         j                        }| j                  |      }| j                  ||       y rZ   )r   r]   r^   r_   r`   r,   rX   ra   s        r   test_getitem_arrayz$TestFancyIndexing.test_getitem_array   s^    iiT	"**A4$;7>>rxxH003""30r   c                    t         } t        d      |      }|D ]  }||   }t        j                  |      }t        j                  |      } ||||        ||||       | j	                  |j
                  |j
                         | j	                  |j                  |j                         t        j                  j                  ||        y )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*Ee*C}}S)H--$C8UC(#uc" SYY7SYY7JJ##C2 r   c                     d}d}t        j                  ||z        j                  |f|z        j                  t         j                        }| j                  ||      }| j                  ||       y rZ   )r   r]   r^   r_   r`   r>   rq   ra   s        r   test_setitem_tuplez$TestFancyIndexing.test_setitem_tuple   s`    iiT	"**A4$;7>>rxxH55a>""30r   c                     d}d}t        j                  ||z        j                  |f|z        j                  t         j                        }| j                  ||d      }| j                  ||       y 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        j                  |f|z        j                  t         j                        dz   }| j                  |      }| j                  ||       y )Nr[   r\   
   )r   r]   r^   r_   r`   r,   rq   ra   s        r   test_setitem_arrayz$TestFancyIndexing.test_setitem_array   sc    iiT	"**A4$;7>>rxxH2M003""3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 ];  \  }}|j                         } ||d|        ||d|       | j                  ||       = y )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   sU    "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                    
 t          t        d            

 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 ]  } |||        : 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                  t              5   t        d      t              }	 |	|dd       d d d         j                  t              5   t        d      t              }	 |	|dd       d d d         j                          y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   >xY w)NTrD   c                      | |      } | |      }j                  ||       t        |d      r)j                  |j                  |j                  k(         y y )Norder)r   hasattrrI   r   )rP   indrV   rW   rR   rQ   r(   s       r   checkz-TestFancyIndexing.test_np_take.<locals>.check   sT    c3'HS/C##Hc2x)  399!<= *r   r#   )r#   r{   r#      r\   r{   r   r#   r{   r#   )r   )r   r\   r.      rz   )r[   r\   g333333?r   )r   r   appendr   r   r   
complex128r]   r^   rN   assertRaises
IndexErrorr   r   disable_leak_check)r(   r   test_indicesdtr   r   szAillegal_indicesxtake_kwsrR   rQ   s   `         @@r   test_np_takezTestFancyIndexing.test_np_take   s   "T"6*	> ABHH%567BHHsQCjA3+%>?@,-I&3488R]]+B		"B'//7A#a $ , ffq"((3-3$(9K5C4!8*. A"":.a /. !
 {+!cUO , {+)sD)+6HQ1 ,
 {+)sD)+6HQ" ,
 	!% /. ,+ ,+
 ,+s0   <
I%I!I"I*I	II'*I3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 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_setitem  s    AcFHr   iH  )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  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 r   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!      sS    .563,11)13 111,.7"r*3r   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gZ fd
Z	d Z
d Zd Zd Zd Zd Z xZS )TestFancyIndexingMultiDim)r{   r   r      	   rw   r[   r{   r\   )r   r#   r\   r[   r.   r#   N)TFTFTFF)TFTFTFc                 j    t         |           t        j                  j	                  d      | _        y )Nr#   )supersetUpr   randomdefault_rngrng)r(   	__class__s    r   r   zTestFancyIndexingMultiDim.setUpI  s"    99((+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                  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 )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_indicesM  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?+  r   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 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    		 
	 ii2I6!))HHO	C'S%(	2 	HNN3HNN3


X. 	,,S(;<r   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 r   r   )r   r   r   s      r   set_itemzATestFancyIndexingMultiDim.check_setitem_indices.<locals>.set_item  s    E#Jr   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    		 
	 ii2I6%j==%mmC 5#.eS! 	HNN3HNN3


X.r   c                     | j                   j                         }|| j                         z  }|D ]9  }| j                  |      5  | j	                  | j
                  |       d d d        ; y # 1 sw Y   FxY wN)r   )indexing_casesrG   r   subTestrX   rJ   r(   r   r   s      r   test_getitemz&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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 ]d  \  }}| j                  t              5 }| j                  | j                  |       d d d        | j                  |t        j                               f y # 1 sw Y   1xY w)	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     <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##C,	)r   r   r   rJ   r1   r   r   rA   r   r   r   rX   rq   r   r   r   __classcell__)r   s   @r   r   r   0  s&     E 
q!a/2A6	
HBHH[!5;a9 
1hbhh{+,	+	8, 
1hbhh{+Qa
;	+	8U1QZ8 
q!a	@	A	
	 
HBHH<=	teAh	 #N*,>@=./(	<	<r   r   __main__)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      sm       # #  ) 9*U3 U3pt tn zHMMO r   