
    GJj                        d dl mZmZ d dlZd dlmZmZmZm	Z	 d dl
mZ d dlmZmZmZmZ d dlZd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d  Z,d! Z-d" Z.d# Z/d$ Z0d% Z1d& Z2d' Z3d( Z4d) Z5d* Z6d+ Z7d, Z8d- Z9d. Z:d/ Z;d0 Z<d1 Z=d2 Z>d3 Z?d4 Z@d5 ZA G d6 d7ee      ZBeBj                           G d8 d9ee      ZDeDj                          eFd:k(  r ej                          yy);    )productcombinations_with_replacementN)jitnjittypeoftypes)numpy_version)TestCaseMemoryLeakMixintagskip_if_numpy_2c                 "    | j                         S N)allarrs    k/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/numba/tests/test_array_reductions.py	array_allr          779    c                 ,    t        j                  |       S r   )npr   r   s    r   array_all_globalr          66#;r   c                 "    | j                         S r   )anyr   s    r   	array_anyr      r   r   c                 ,    t        j                  |       S r   )r   r   r   s    r   array_any_globalr      r   r   c                 "    | j                         S r   )cumprodr   s    r   array_cumprodr"      s    ;;=r   c                 ,    t        j                  |       S r   )r   r!   r   s    r   array_cumprod_globalr$          ::c?r   c                 ,    t        j                  |       S r   )r   
nancumprodr   s    r   array_nancumprodr(      s    ==r   c                 "    | j                         S r   )cumsumr   s    r   array_cumsumr+           ::<r   c                 ,    t        j                  |       S r   )r   r*   r   s    r   array_cumsum_globalr.   #       99S>r   c                 ,    t        j                  |       S r   )r   	nancumsumr   s    r   array_nancumsumr2   &       <<r   c                 "    | j                         S r   )sumr   s    r   	array_sumr6   )   r   r   c                 ,    t        j                  |       S r   )r   r5   r   s    r   array_sum_globalr8   ,   r   r   c                 "    | j                         S r   )prodr   s    r   
array_prodr;   /       88:r   c                 ,    t        j                  |       S r   )r   r:   r   s    r   array_prod_globalr>   2       773<r   c                 "    | j                         S r   )meanr   s    r   
array_meanrB   5   r<   r   c                 ,    t        j                  |       S r   )r   rA   r   s    r   array_mean_globalrD   8   r?   r   c                 "    | j                         S r   )varr   s    r   	array_varrG   ;   r   r   c                 ,    t        j                  |       S r   )r   rF   r   s    r   array_var_globalrI   >   r   r   c                 "    | j                         S r   )stdr   s    r   	array_stdrL   A   r   r   c                 ,    t        j                  |       S r   )r   rK   r   s    r   array_std_globalrN   D   r   r   c                 "    | j                         S r   )minr   s    r   	array_minrQ   G   r   r   c                 ,    t        j                  |       S r   )r   rP   r   s    r   array_min_globalrS   J   r   r   c                 ,    t        j                  |       S r   )r   aminr   s    r   
array_aminrV   M   r?   r   c                 "    | j                         S r   )maxr   s    r   	array_maxrY   P   r   r   c                 ,    t        j                  |       S r   )r   rX   r   s    r   array_max_globalr[   S   r   r   c                 ,    t        j                  |       S r   )r   amaxr   s    r   
array_amaxr^   V   r?   r   c                 "    | j                         S r   argminr   s    r   array_argminrb   Y   r,   r   c                 ,    t        j                  |       S r   r   ra   r   s    r   array_argmin_globalre   \   r/   r   c                 "    | j                         S r   argmaxr   s    r   array_argmaxri   _   r,   r   c                 ,    t        j                  |       S r   r   rh   r   s    r   array_argmax_globalrl   b   r/   r   c                 ,    t        j                  |       S r   )r   medianr   s    r   array_median_globalro   e   r/   r   c                 ,    t        j                  |       S r   )r   nanminr   s    r   array_nanminrr   h   r/   r   c                 ,    t        j                  |       S r   )r   nanmaxr   s    r   array_nanmaxru   k   r/   r   c                 ,    t        j                  |       S r   )r   nanmeanr   s    r   array_nanmeanrx   n   r%   r   c                 ,    t        j                  |       S r   )r   nansumr   s    r   array_nansumr{   q   r/   r   c                 ,    t        j                  |       S r   )r   nanprodr   s    r   array_nanprodr~   t   r%   r   c                 ,    t        j                  |       S r   )r   nanstdr   s    r   array_nanstdr   w   r/   r   c                 ,    t        j                  |       S r   )r   nanvarr   s    r   array_nanvarr   z   r/   r   c                 ,    t        j                  |       S r   )r   	nanmedianr   s    r   array_nanmedian_globalr   }   r3   r   c                 .    t        j                  | |      S r   )r   
percentiler   qs     r   array_percentile_globalr      s    ==a  r   c                 .    t        j                  | |      S r   )r   nanpercentiler   s     r   array_nanpercentile_globalr      s    C##r   c                 ,    t        j                  |       S r   )r   ptpas    r   array_ptp_globalr      s    66!9r   c                 "    | j                         S r   )r   r   s    r   	array_ptpr      s    557Nr   c                 .    t        j                  | |      S r   )r   quantiler   s     r   array_quantile_globalr      s    ;;sAr   c                 .    t        j                  | |      S r   )r   nanquantiler   s     r   array_nanquantile_globalr      s    >>#q!!r   c                       t         j                  k(  rd }n fd} |d      } |d      j                  dd      } |d      d d d   j                  dd	
      }|j                  j                  s|j                  j
                  rJ |||gS )Nc                 P    | dz  dk(  sJ t        j                  ddg| dz  z        S )N   r      )r   bool_)ns    r   factoryz!base_test_arrays.<locals>.factory   s.    q5A::88QFa1f-..r   c                 8    t        j                  |       dz   S )Ndtyper   )r   arange)r   r   s    r   r   z!base_test_arrays.<locals>.factory   s    99Qe,q00r   
   r         )r      r   A)order)r   r   reshapeflagsc_contiguousf_contiguous)r   r   a1a2a3s   `    r   base_test_arraysr      s    	/	1 
B			Q	"B
"+tt		$	$Yc	$	:B%%)>)>??B<r   c                    t        |       }| t        j                  k(  r||D cg c]  }|dz  	 c}z  }| t        j                  k(  rZg }|D ]B  }|dz  d|z  dz  z   }t        j                  |d d d         |d d d<   |j                  |       D |j                  |       |D ]&  }|j                  t        j                  |       k(  r&J  |S c c}w )Nr                 ?   r   )r   r   float32	complex64conjappendextendr   )r   
array_listr   acctmps        r   full_test_arraysr      s    !%(J 

z2z!q2vz22
 Ab&26B;&Cwws3Q3x(C!HJJsO  	#ww"((5/)))  3s   Cc                 @    t        |       } | |      } ||      }||fS r   )r   )compare_func
test_arraycfuncnumpy_resultnumba_results        r   run_comparativer      s+    E
+L$L%%r   c                       e Zd ZdZ fdZd Zd Zd ZefdZ	d Z
d Zefd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&e'd#        Z(d$ Z)d% Z*dbd&Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<dcd8Z=d9 Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKdG ZLdH ZMdI ZNdJ ZOdK ZPdL ZQdM ZRdN ZSdO ZTdP ZUeVdQ        ZWdR ZXdS ZYdT ZZdU Z[dV Z\dW Z]dX Z^dY Z_dZ Z`d[ Zad\ Zbd] Zcd^ Zdd_ Zed` Zfegda        Zh xZiS )dTestArrayReductionszQ
    Test array reduction methods and functions such as .sum(), .max(), etc.
    c                 h    t         t        |           t        j                  j                  d       y )N*   )superr   setUpr   randomseed)self	__class__s    r   r   zTestArrayReductions.setUp   s!    !4.0
		rr   c                 n     t        d             fd}t        j                  g d      } ||       t        j                  ddg      } ||       t        j                  g d      } ||       t        j                  g d      } ||       t        j                  g d	      } ||       t        j                  g d
      } ||       t        j                  g d      } ||       t        j                  g d      } ||       t        j                  ddg      } ||       y )NTnopythonc                 F     j                    |        |       fi  y r   assertPreciseEqualr   r   kwargspyfuncr   s    r   checkz8TestArrayReductions.check_reduction_basic.<locals>.check   "    #D##F3KsFvFr   )      ?       @               r         r   r   )r         @inf)r   r   -inf)r   r   r   r   )nanr   r   r         @)r   r   r   r   r   r   r   )g      @r   r   r   r   )r   r   float64r   r   r   r   r   r   s   ```  @r   check_reduction_basicz)TestArrayReductions.check_reduction_basic   s    "T"6*	G jj9:c
jj$&c
jj+,c
jj,-c
jj34c
jj78c
jjFGc
jj23c
jj%(c
r   c                 R     t        d             fd}t        j                  d      } ||       t        j                  d      } ||       t        j                  d      } ||       t        j                  d      } ||       t        j                  d      } ||       t        j                  d	      } ||       t        j                  t        j
                        } ||       t        j                  t        j
                         } ||       t        j                  d
      } ||       t        j                  d      } ||       t        j                  d      } ||        j                         5 } d       d d d        y # 1 sw Y   y xY w)NTr   c                 F     j                    |        |       fi  y r   r   r   s    r   r   z5TestArrayReductions.check_scalar_basic.<locals>.check   r   r   r   r   g      5@g      5   ir   Fstring)r   r   r   r   int32r   r   assertTypingError)r   r   r   r   r   er   s   ```   @r   check_scalar_basicz&TestArrayReductions.check_scalar_basic   s/   "T"6*	G jjoc
jjc
jjc
jjc
hhrlc
hhsmc
 jj c
jj"&&!c
jjc
 hhtnc
hhuoc
 ##%(O &%%s   	FF&c                      t        d             fd}t        j                  d      } ||       t        j                  d      } ||       t        j                  d      } ||       t        j                  d      } ||       t        j                  d      } ||       t        j                  d	d
      } ||       t        j                  d	d      } ||       t        j                  d	d      } ||       t        j                  d	d      } ||       t        j                  dd      } ||       y )NTr   c                 F     j                    |        |       fi  y r   r   r   s    r   r   z8TestArrayReductions.check_scalar_temporal.<locals>.check  r   r   
2020-01-012020-01-01T12:002020-01-01T12:00:00.000000z2020-01-01T12:00:00.000000000NaTr   Dmsusr   ns)r   r   
datetime64timedelta64r   s   ```  @r   check_scalar_temporalz)TestArrayReductions.check_scalar_temporal  s    "T"6*	G mmL)c
mm./c
mm89c
mm;<c
mmE"c
 nnQ$c
nnQ$c
nnQ$c
nnQ%c
nnQ%c
r   c                 $     t        d             fd}t        j                  ddt        d      t        d      g      } ||       d|d	<    ||       d
|d	<    ||       |j	                  d      } ||        ||d d d          y )NTr   c                 B    j                   |        |              y r   r   r   r   r   r   s    r   r   z1TestArrayReductions.test_all_basic.<locals>.check%      ##F3Ks<r   r   r   r   r   r   r         ?r   r   r   r   r   r   floatr   r   r   r   r   r   s   ``  @r   test_all_basicz"TestArrayReductions.test_all_basic#  s    "T"6*	= jj#sE%L%,?@c
Ac
Ac
kk&!c
c$B$ir   c                      t        d      t               fd} |t        j                  g d              |t        j                  g d              |t        j                  g d              |t        j                  g d              j	                         5 } d       d d d        y # 1 sw Y   y xY w)	NTr   c                 P    t        |       } |       }j                  ||       y r   )r   r   argexpectedgotr   r   s      r   r   z1TestArrayReductions.test_array_all.<locals>.check5  %     ~H*C##C2r   TTTTFTr   r   r   r   r   r   hello)r   r   r   arrayr   r   r   r   r   s   `  @r   test_array_allz"TestArrayReductions.test_array_all2  s    "T"9-	3 	bhh)*+bhh*+,bhh'(bhh'(##%'N &%%   #	B55B>c                      t        d      t               fd} |t        j                  d              |t        j                  d              |t        j                  d              |t        j                  d              |t        j
                  d              |t        j
                  d              |t        j
                  d	              |t        j
                  d
              |t        j
                  d              |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                          |t        j                          |t        j                           |d        |t        j                  g d              |t        j                  g d              |t        j                  g d              |t        j                  g d              j                         5 } g d       d d d        y # 1 sw Y   y xY w)NTr   c                 P    t        |       } |       }j                  ||       y r   )r   r   r  s      r   r   z.TestArrayReductions.test_np_all.<locals>.checkF  &    ',H*C##C2r   r   皙?Fr   r   r   
1970-01-01r   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  s   `  @r   test_np_allzTestArrayReductions.test_np_allC     "T"#34	3 	bjjobjjobhhtnbhhuo 	bmmL)*bmm./0bmm89:bmmL)*bmmE"#bnnQ$%bnnQ$%bnnQ$%bnnQ%&bnnQ%& 	bffbffrvvgd 	bhh)*+bhh*+,bhh'(bhh'(##%'N &%%   -JJ
c                 :     t        d             fd}t        j                  g d      } ||       t        d      |d<    ||       t        d      |d<    ||       d|d<    ||       |j	                  d	      } ||        ||d d d
          y )NTr   c                 B    j                   |        |              y r   r   r  s    r   r   z1TestArrayReductions.test_any_basic.<locals>.checkn  r  r   )r   r   r   r   r   r   r   r  r  r   r  r
  s   ``  @r   test_any_basicz"TestArrayReductions.test_any_basicl  s    "T"6*	= jj./c
uAc
uAc
Ac
kk&!c
c$B$ir   c                      t        d      t               fd} |t        j                  g d              |t        j                  g d              |t        j                  g d              |t        j                  g d              j	                         5 } d       d d d        y # 1 sw Y   y xY w)	NTr   c                 P    t        |       } |       }j                  ||       y r   )r   r   r  s      r   r   z1TestArrayReductions.test_array_any.<locals>.check  r  r   r  r  r  r  r  )r   r   r   r  r   r  s   `  @r   test_array_anyz"TestArrayReductions.test_array_any}  s    "T"9-	3 	bhh)*+bhh*+,bhh'(bhh'(##%'N &%%r  c                      t        d      t               fd} |t        j                  d              |t        j                  d              |t        j                  d              |t        j                  d              |t        j
                  d              |t        j
                  d              |t        j
                  d	              |t        j
                  d
              |t        j
                  d              |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                          |t        j                          |t        j                           |d        |t        j                  g d              |t        j                  g d              |t        j                  g d              |t        j                  g d              j                         5 } g d       d d d        y # 1 sw Y   y xY w)NTr   c                 P    t        |       } |       }j                  ||       y r   )r   r   r  s      r   r   z.TestArrayReductions.test_np_any.<locals>.check  r  r   r   r  Fr   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  s   `  @r   test_np_anyzTestArrayReductions.test_np_any  r#  r$  c                 .    | j                  t               y r   )r   r6   r   s    r   test_sum_basicz"TestArrayReductions.test_sum_basic  s    ""9-r   c                 .    | j                  t               y r   )r   rB   r/  s    r   test_mean_basicz#TestArrayReductions.test_mean_basic  s    "":.r   c                 n     t        d      t               fd} |t        j                  d              |t        j                  d              |t        j
                  d              |t        j                  d              |t        j                  d              |t        j                  d              |t        j                  d	              |t        j                  d
              |t        j                  d              |t        j                          |t        j                          |t        j                           |d        |d        |d        |d        |d        |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                  dd              |t        j                  dd              j                         5   d       d d d        y # 1 sw Y   y xY w)NTr   c                 P    t        |       } |       }j                  ||       y r   )rD   r   r  s      r   r   z6TestArrayReductions.test_np_mean_scalar.<locals>.check  &    (-H*C##C2r   r   r   Fg      ?g      y      @        y     N@     R@r   r   r   gӋ5>g>dпr   r   r   r   r   ztest String)r   rD   r   r   int64uint32r   r   r   r   
complex128r   r   r   r   r   r   r   s   ` @r   test_np_mean_scalarz'TestArrayReductions.test_np_mean_scalar  s   "T"#45	3 	bhhqkbhhrlbiilbhhtnbhhuo 	bjjbjj 	bll4 !bmmF#$ 	bffbffrvvgdc
aih 	bnnQ$%bnnQ$%bnnQ$%bnnQ%&bnnQ%& ##%-  &%%s   	H++H4c                     t        d      t              }t        j                  t        j                  ft        j
                  t        j
                  ft        j                  t        j                  ft        j                  t        j                  ffD ]  \  }}| j                  ||      5   |g       }t        j                  |      }| j                   ||      |       | j                  |j                  d   j                  |       ddd        t        j                  g       }t        j                  |      }| j                   ||      |       y# 1 sw Y   xY w)z7Test that mean of empty array returns nan (issue #5502)Tr   )np_typenb_typer   N)r   rB   r   r   r   r   r   r9  subTestrA   r   assertEqualnopython_signaturesreturn_typer7  )r   r   r=  r>  r   r  s         r   test_mean_empty_arrayz)TestArrayReductions.test_mean_empty_array  s
   "T":. #%**emm!<"$**emm!<"$,,!@"$--1A1A!B!DGW gw?bk773<''c
H=  !:!:2!>!J!JGT	 @?	!D hhrl773<c
H5 @?s   .AEE#	c                     d}t         j                  t         j                  fD ]I  }t        j                  ||      } |d      |d<   t	        t
        |      \  }}| j                  ||       K y )Ni  r   i r   )r   r   r   zerosr   rB   r   )r   r   r   r   nprnbrs         r   test_mean_count_roundingz,TestArrayReductions.test_mean_count_rounding  s^     jj",,/E((1E*C9%CF&z37HC##C-	 0r   c                      t        d      t              }t        j                  g d      }t        j                  |      }| j                   ||      |       y)z3Test that mean of empty timedelta array returns NaTTr   ztimedelta64[D]r   N)r   rB   r   r  rA   r   )r   r   r   r  s       r   test_mean_empty_timedeltaz-TestArrayReductions.test_mean_empty_timedelta  sG    "T":. hhr!12773<c
H5r   c                 `    t        d      t              }t        j                  g d      }| j	                          | j                  t              5  t        j                  |       ddd       | j                  t              5   ||       ddd       y# 1 sw Y   0xY w# 1 sw Y   yxY w)zLTest that mean of empty datetime array raises error (matches NumPy behavior)Tr   zdatetime64[D]r   N)r   rB   r   r  disable_leak_checkassertRaises	ExceptionrA   )r   r   r   s      r   test_mean_empty_datetimez,TestArrayReductions.test_mean_empty_datetime  s    "T":. hhr1! y)GGCL * y)#J *) *) *)s   B	B$B!$B-c                 2    | j                  t        d       y Ndouble)prec)r   rG   r/  s    r   test_var_basicz"TestArrayReductions.test_var_basic!  s    ""98"<r   c                 X    | j                  t               | j                  t               y r   )r   rN   r   rL   r/  s    r   test_std_basicz"TestArrayReductions.test_std_basic$  s     01""9-r   c                     | j                  t               | j                  t               | j	                  t               y r   )r   rS   r   rQ   r  r/  s    r   test_min_basicz"TestArrayReductions.test_min_basic*  s.     01""9-""#34r   c                     | j                  t               | j                  t               | j                  t               y r   )r   rV   r   r  r/  s    r   test_amin_basicz#TestArrayReductions.test_amin_basic2  s,    
+"":."":.r   c                     | j                  t               | j                  t               | j	                  t               y r   )r   rY   r   r[   r  r/  s    r   test_max_basicz"TestArrayReductions.test_max_basic:  s.    ""9- 01""#34r   c                     | j                  t               | j                  t               | j                  t               y r   )r   r^   r   r  r/  s    r   test_amax_basicz#TestArrayReductions.test_amax_basicB  s,    "":.
+"":.r   c                 .    | j                  t               y r   )r   rb   r/  s    r   test_argmin_basicz%TestArrayReductions.test_argmin_basicJ      ""<0r   c                 .    | j                  t               y r   )r   ri   r/  s    r   test_argmax_basicz%TestArrayReductions.test_argmax_basicM  ra  r   c                 .    | j                  t               y r   )r   rr   r/  s    r   test_nanmin_basicz%TestArrayReductions.test_nanmin_basicP  ra  r   c                 .    | j                  t               y r   )r   ru   r/  s    r   test_nanmax_basicz%TestArrayReductions.test_nanmax_basicS  ra  r   c                 .    | j                  t               y r   )r   rx   r/  s    r   test_nanmean_basicz&TestArrayReductions.test_nanmean_basicV      ""=1r   c                 .    | j                  t               y r   )r   r{   r/  s    r   test_nansum_basicz%TestArrayReductions.test_nansum_basicY  ra  r   c                 .    | j                  t               y r   )r   r~   r/  s    r   test_nanprod_basicz&TestArrayReductions.test_nanprod_basic\  rj  r   c                 .    | j                  t               y r   )r   r   r/  s    r   test_nanstd_basicz%TestArrayReductions.test_nanstd_basic_  ra  r   c                 2    | j                  t        d       y rQ  )r   r   r/  s    r   test_nanvar_basicz%TestArrayReductions.test_nanvar_basicb  s    ""<h"?r   c                 4     t        d             fd t        j                  g              fd} |t        j                  d      dz         D ]
  } ||        fd} |t        j                  d      dz         D ]
  } ||        y )	NTr   c                 J     |       } |       }j                  ||       y r   r   )r   r  r  r   r   r   s      r   r   z5TestArrayReductions.check_median_basic.<locals>.checkg  s%    c{H*C##C2r   c                 l     |        | j                  d      }  |         | j                         y )N)	      r   Tr   r   s    r   	check_oddz9TestArrayReductions.check_median_basic.<locals>.check_oddp  s*    !H		&!A!H!##Jr   ?   g      %@c                 l     |        | j                  d      }  |         | j                         y )N)      rx  rz  s    r   
check_evenz:TestArrayReductions.check_median_basic.<locals>.check_eveny  s*    !H		'"A!H!##Jr   @   )r   r   r  r   )r   r   array_variationsr{  r   r  r   r   s   ``    @@r   check_median_basicz&TestArrayReductions.check_median_basice  s    "T"6*	3 	bhhrl	
 ""))B-$"67AaL 8	
 ""))B-$"67AqM 8r   c              #     K   |  | d d d   j                         } |  t        j                  j                  |        |  d| | dz  dk\  <   |  t        j                  | | dz  dk\  <   |  t        j                  | d d  |  y w)Nr         @r~  r   r   )copyr   r   shuffler   r   s    r   _array_variationsz%TestArrayReductions._array_variations  s~      ddGLLN
		!!a%1*!a%1*vv!s   BBc                 :    t         }d }| j                  ||       y )Nc              3      K   |  | d d d   j                         } |  t        j                  j                  |        |  d| | dz  dk\  <   |  y w)Nr   r  r~  r   )r  r   r   r  r   s    r   
variationsz9TestArrayReductions.test_median_basic.<locals>.variations  sP     G$B$AGIIa GAa!eqjMGs   AA)ro   r  )r   r   r  s      r   test_median_basicz%TestArrayReductions.test_median_basic  s    $	 	
3r   c           	           t        d            d  fd	} j                  j                  d      j                  ddd      }t	        j
                  d|d      d d d   } |||        ||d        |||d	z          |||       t        j                  t        j                   t        j                  g} j                  j                  |d
      |j                  d d
  j                  j                  |        j                  j                  |        |||       |j                         j                         }|j                         j                         } |||        |t        |      t        |              j                  j                  g dd
      }t	        j
                  d|d      } |||       t	        j                  d      dz  }t        j                  j!                   |d      d       t        j                  j!                   ||      d       t        j                  j!                   ||d	z        d       t	        j                  d      j                  dd      }t	        j"                  d      |z  }t        j                  j!                   ||      g d       t	        j                  d      j                  dddd      }t	        j"                  d      |z  }t        j                  j!                   ||      j$                  d       t	        j"                  d      |z  }t        j                  j!                   ||      j$                  d       t	        j                  d      j                  dd      }t        j                  j!                   ||d	z        d        j'                  t	        j(                   ||d	z                     t        j                  j!                   g dd      d       t	        j"                  g d      } ||d	z  g       t        j                  j!                  |t	        j"                  g d             y )!NTr   c                      | |      } | |      }t        j                  |      }t        j                  |      rj                  |||       y j                  ||   ||   |       y N)abs_tolr   isfiniter   r   	r   r   r  r  r  finiter   r   r   s	         r   r   z@TestArrayReductions.check_percentile_and_quantile.<locals>.check  l    a|H1+C [[*Fvvf~''Xw'G''FXf5E07 ( 9r      r   r      r   r   r   )r   r   r   r~  r            ?r   r  g      ?r   r~  )      ?r  r   )g      @      @g      &@ih     )r  r  r   )r  r  g      ?)r   r  r!  r   )r   r   r~  r   )g-q=)r   r   randnr   r   linspacer   r   choiceflatr  flattentolisttupler   testingassert_equalr  shape
assertTrueisscalar)	r   r   q_upper_boundr   r   r   
not_finitexr   s	   ``      @r   check_percentile_and_quantilez1TestArrayReductions.check_percentile_and_quantile  sJ   "T"6*
	9 KKb!))!Q2KK="-dd3aaa"#affrvvgrvv.
kk((R8sAAaIIK IIK aeAha!KK|R0KK=!,a IIaL3


aR0


a 7=


a): ;TBIIbM!!!Q'HH%&6


a->?IIm$,,Q1a8HH\"]2


a 1 148HH'(=8


a 1 148IIbM!!!Q'


a): ;SAE!]Q->$?@A


i 3Q7HH\"a-!#$%


288L#9:r   c                    
  t        d            
d
 fd	}d
 fd	}d }dd|z  d|z  |f}d	d
t        j                  t        j                  t        j                   f} ||      D ]  } |||        |d	k(  r|}	n|}	t        j                  d      }t        j                  d	      } |	||       d}|dz  } |	||       y )NTr   c                      | |      } | |      }t        j                  |      }t        j                  |      rj                  |||       y j                  ||   ||   |       y r  r  r  s	         r   r   z>TestArrayReductions.check_percentile_edge_cases.<locals>.check  r  r   c                      | |      j                  t        j                        } | |      }j                  |||       y r  )astyper   r   r   )r   r   r  r  r  r   r   r   s        r   convert_to_float_and_checkzSTestArrayReductions.check_percentile_edge_cases.<locals>.convert_to_float_and_check  s=    a|**2::6H1+C##C7#Cr   c              3   ~   K   t        dd      D ]*  }t        | |      D ]  }t        j                  |        , y w)Nr   r   )ranger   r   r  )elementsicombs      r   _array_combinationszLTestArrayReductions.check_percentile_edge_cases.<locals>._array_combinations  s6     1b\9(AFD((4.( G "s   ;=r   皙?r  r   r   r   r   )g+=)r   r   r   r   r  )r   r   r  r   r  r  r   element_poolr   _checkr   s   ``        @r   check_percentile_edge_casesz/TestArrayReductions.check_percentile_edge_cases  s    "T"6*
	9	D
	) m#S=%8-H2rvvrvvw7$\2A!QK 3
 A/FFHHQKHHQKq!Aq!r   c                      t        d      |       fd} j                          t        j                  d      } ||d        ||d        ||ddt        j                  f        j                         5 }t        j                  d      d	z  }d
} ||       d d d         j                  dt        j                               y # 1 sw Y   /xY w)NTr   c                     j                  t              5 } | |       d d d        j                  dt        j                               y # 1 sw Y   /xY w)Nz)Percentiles must be in the range [0, 100]rM  
ValueErrorr@  str	exceptionr   r   raisesr   r   s      r   	check_errzBTestArrayReductions.check_percentile_exceptions.<locals>.check_err  sI    "":.&a /;F$$% /.   
AAr   )r   r   i   r   r   r   r  Not supported for complex dtype	r   rL  r   r   r   r   assertInr  r  r   r   r  r   r   r   r   s   `     @r   check_percentile_exceptionsz/TestArrayReductions.check_percentile_exceptions  s    "T"6*	 	!IIaL!R!\"!aRVV_%##%		!r!AA!QK &
 	7Q[[9IJ &%   <$CCc                      t        d      |       fd} j                          t        j                  d      } ||d        ||d        ||ddt        j                  f        j                         5 }t        j                  d      dz  }d} ||       d d d         j                  d	t        j                               y # 1 sw Y   /xY w)
NTr   c                     j                  t              5 } | |       d d d        j                  dt        j                               y # 1 sw Y   /xY w)Nz%Quantiles must be in the range [0, 1]r  r  s      r   r  z@TestArrayReductions.check_quantile_exceptions.<locals>.check_err+  sI    "":.&a /7F$$% /.r  r   g      )r  r  g?r  r   r  r  r  s   `     @r   check_quantile_exceptionsz-TestArrayReductions.check_quantile_exceptions(  s    "T"6*	 	!IIaL!T!&'!c4()##%		!r!AA!QK &
 	7Q[[9IJ &%r  c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y Nd   r  )r   r  r  r  r   r   s     r   test_percentile_basicz)TestArrayReductions.test_percentile_basicB  s;    (**6*E((s(C((0r   c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y r  )r   r  r  r  r  s     r   test_nanpercentile_basicz,TestArrayReductions.test_nanpercentile_basicH  s;    +**6*E((s(C((0r   c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y Nr   r  )r   r  r  r  r  s     r   test_quantile_basicz'TestArrayReductions.test_quantile_basicN  s;    &**6*C((q(A&&v.r   c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y r  )r   r  r  r  r  s     r   test_nanquantile_basicz*TestArrayReductions.test_nanquantile_basicT  s;    )**6*C((q(A&&v.r   c                 H    t         }| j                  || j                         y r   )r   r  r  r  s     r   test_nanmedian_basicz(TestArrayReductions.test_nanmedian_basicZ  s    '(>(>?r   c                 V   t        j                  dt         j                        }t        |      }| j	                  |j
                  d       | j	                  |j                  d        t        |f      t              }| j	                  t        j                  |       ||             y Nr   r   r   C)
r   r   r   r   r@  ndimlayoutr   r8   r5   r   r   arrtyr   s       r   test_array_sum_globalz)TestArrayReductions.test_array_sum_global^  sv    ii"((+sQ's+eX 01eCj1r   c                 R   t        j                  dt         j                        dz   }t        |      }| j	                  |j
                  d       | j	                  |j                  d        t        |f      t              }| j	                  |j                          ||             y r  )
r   r   r   r   r@  r  r  r   r;   r:   r  s       r   test_array_prod_int_1dz*TestArrayReductions.test_array_prod_int_1dg  sx    ii"((+a/sQ's+eXz*U3Z0r   c                 n   t        j                  dt         j                        dz   }t        |      }| j	                  |j
                  d       | j	                  |j                  d        t        |f      t              }t         j                  j                  |j                          ||             y )Nr   r   r  r   r  )r   r   r   r   r@  r  r  r   r;   r  assert_allcloser:   r  s       r   test_array_prod_float_1dz,TestArrayReductions.test_array_prod_float_1dp  s|    ii"**-6sQ's+eXz*


""388:uSz:r   c                 r   t        j                  dt         j                        }t        |      }| j	                  |j
                  d       | j	                  |j                  d        t        |f      t              }t         j                  j                  t        j                  |       ||             y r  )r   r   r   r   r@  r  r  r   r>   r  r  r:   r  s       r   test_array_prod_globalz*TestArrayReductions.test_array_prod_globaly  sz    ii"((+sQ's+eX01


""2773<s<r   c                      j                  t                t        d      t               fd} |t        j                  d              |t        j
                  d              |t        j                  d              |t        j                  d              |t        j                  d              |t        j                  d              |t        j                  d              |t        j                  d             y )	NTr   c                 P    t        |       } |       }j                  ||       y r   )r>   r   r  s      r   r   z6TestArrayReductions.test_np_prod_scalar.<locals>.check  r5  r   r   r   r~  r   y                )r   r>   r   r   int8uint8int16uint16r   r8  r   r9  r:  s   ` @r   test_np_prod_scalarz'TestArrayReductions.test_np_prod_scalar  s     12"T"#45	3 	bggajbhhqkbhhqkbiilbhhqkbiil 	bll2bmmB r   c                 f   t        j                  ddt         j                        }t        ||      \  }}| j	                  ||       t        j
                  ddd      }t        ||      \  }}| j	                  ||       |j                  d      }t        ||      \  }}| j	                  ||       y )Nr   r   r   r  r  )r   r   )r   r   r  r   r   r  r   )r   r   r   r  r  s        r   check_cumulativez$TestArrayReductions.check_cumulative  s    ii2RXX.'4#X.kk!Q"'4#X.kk&!'4#X.r   c                 .    | j                  t               y r   )r  r+   r/  s    r   test_array_cumsumz%TestArrayReductions.test_array_cumsum  s    l+r   c                 .    | j                  t               y r   )r  r.   r/  s    r   test_array_cumsum_globalz,TestArrayReductions.test_array_cumsum_global  s    12r   c                 .    | j                  t               y r   )r  r"   r/  s    r   test_array_cumprodz&TestArrayReductions.test_array_cumprod  s    m,r   c                 .    | j                  t               y r   )r  r$   r/  s    r   test_array_cumprod_globalz-TestArrayReductions.test_array_cumprod_global  s    23r   c                    |rdnd}t        j                  |      dz   j                  d      }t        ||      \  }}| j	                  ||       t        j                  d      dz   j                  d      }t        ||      \  }}| j	                  ||       |j                  d      }t        ||      \  }}| j	                  ||       y)	zH
        Check that integer overflows are avoided (issue #931).
        r   r   i@  r  l            r7  uint64N)r   r   r  r   r   )r   r   is_prodn_itemsr   rF  rG  s          r   check_aggregation_magnitudez/TestArrayReductions.check_aggregation_magnitude  s     !Byy!E)11':"63/SS) yy}u$,,W5"63/SS)jj""63/SS)r   c                 X    | j                  t               | j                  t               y r   )r  r6   r8   r/  s    r   test_sum_magnitudez&TestArrayReductions.test_sum_magnitude      ((3(()9:r   c                 X    | j                  t               | j                  t               y r   )r  r+   r.   r/  s    r   test_cumsum_magnitudez)TestArrayReductions.test_cumsum_magnitude  s    ((6(()<=r   c                 2    | j                  t        d       y NT)r  )r  r2   r/  s    r   test_nancumsum_magnitudez,TestArrayReductions.test_nancumsum_magnitude  s    (($(Gr   c                 `    | j                  t        d       | j                  t        d       y r  )r  r;   r>   r/  s    r   test_prod_magnitudez'TestArrayReductions.test_prod_magnitude  s)    ((T(B(():D(Ir   c                 `    | j                  t        d       | j                  t        d       y r  )r  r"   r$   r/  s    r   test_cumprod_magnitudez*TestArrayReductions.test_cumprod_magnitude  s)    (((E(()=t(Lr   c                 2    | j                  t        d       y r  )r  r(   r/  s    r   test_nancumprod_magnitudez-TestArrayReductions.test_nancumprod_magnitude  s    (()94(Hr   c                 X    | j                  t               | j                  t               y r   )r  rB   rD   r/  s    r   test_mean_magnitudez'TestArrayReductions.test_mean_magnitude  s    ((4(():;r   c                 X    | j                  t               | j                  t               y r   )r  rG   rI   r/  s    r   test_var_magnitudez&TestArrayReductions.test_var_magnitude  r  r   c                 X    | j                  t               | j                  t               y r   )r  rL   rN   r/  s    r   test_std_magnitudez&TestArrayReductions.test_std_magnitude  r  r   c                    t        |      } t        d      |      }| j                   ||       ||             | j                   ||d d        ||d d              |d d d   j                         }| j                   ||       ||             t        j
                  j                  |       | j                   ||       ||             d|j                  vr>t        dt        |      d      D ]  }d||<   	 | j                   ||       ||             |j                  |j                  d             | j                   ||       ||             y )NTr   r   rn   r   r   r   )r   r   r   r  r   r   r  __name__r  lenfillr   )r   r   r   r  r   r  s         r   _do_check_nptimedeltaz)TestArrayReductions._do_check_nptimedelta  s"   s"T"6*c
F3K8c#2hCR1AB$B$innc
F3K8
		#c
F3K86??* 1c#h*A +##E#Js<U#$c
F3K8r   c                 r    t        j                  d      j                  d      }| j                  ||       y )Nr   zM8[Y]r   r   r   r  r  r   r   r   s      r   check_npdatetimez$TestArrayReductions.check_npdatetime  -    iim"""1""63/r   c                 r    t        j                  d      j                  d      }| j                  ||       y )Nr   zm8[s]r   r   r!  s      r   check_nptimedeltaz%TestArrayReductions.check_nptimedelta  r#  r   c                 X    | j                  t               | j                  t               y r   )r"  rQ   r%  r/  s    r   test_min_npdatetimez'TestArrayReductions.test_min_npdatetime      i(y)r   c                 X    | j                  t               | j                  t               y r   )r"  rY   r%  r/  s    r   test_max_npdatetimez'TestArrayReductions.test_max_npdatetime
  r(  r   c                 X    | j                  t               | j                  t               y r   )r"  rb   r%  r/  s    r   test_argmin_npdatetimez*TestArrayReductions.test_argmin_npdatetime      l+|,r   c                 X    | j                  t               | j                  t               y r   )r"  ri   r%  r/  s    r   test_argmax_npdatetimez*TestArrayReductions.test_argmax_npdatetime  r-  r   c                 .    | j                  t               y r   )r%  ro   r/  s    r   test_median_npdatetimez*TestArrayReductions.test_median_npdatetime  s    23r   c                 .    | j                  t               y r   )r%  r6   r/  s    r   test_sum_npdatetimez'TestArrayReductions.test_sum_npdatetime  s    y)r   c                 .    | j                  t               y r   )r%  r+   r/  s    r   test_cumsum_npdatetimez*TestArrayReductions.test_cumsum_npdatetime  s    |,r   c                 .    | j                  t               y r   )r%  rB   r/  s    r   test_mean_npdatetimez(TestArrayReductions.test_mean_npdatetime  s    z*r   c                      t        d             fd}d }d } |       D ]5  } ||        | ||j                  t        j                                     7  |t        j                  g               |t        j
                  dt        j                               t        j                  t        j                  dt        j                  dd	d
dddg	      }|d|d d d   z  z   }|j                  dd      } ||       y )NTr   c                 J     |       } |       }j                  ||       y r   r   r   r  r  r   r   r   s      r   r   z7TestArrayReductions.check_nan_cumulative.<locals>.check%  %    ayH(C##Hc2r   c                     | j                   dz  }t        j                  | t        j                  j	                  t        | j                         |d      t        j                         | S )Nr   F)replace)sizer   putr   r  r  r   )r   ps     r   _set_some_values_to_nanzITestArrayReductions.check_nan_cumulative.<locals>._set_some_values_to_nan*  sF    !AFF1bii&&uQVV}a&GPHr   c               3     K   t        j                  ddd      j                  ddd       t        j                  t         j                  ddg       t        j                  g d       t        j
                  dd       t        j                  t        j
                  dd	      d
z
         t        j
                  ddt         j                        d d d    y w)Nr   r   <   r~  r   )TTTFr   r   r  gfffff@@r   )r   r  r   r  r   r   asfortranarrayr    r   r   a_variationsz>TestArrayReductions.check_nan_cumulative.<locals>.a_variations/  s     ++b!R(00Aq99((BFFAq>**((455))Ar""##BIIa$4t$;<<))Ar4TrT::s   C!C#r   r   r~  r   r  rw  r  rv  r   r   r   )r   r  r   r   r  fullr   r   )r   r   r   rA  rF  r   partsr   s   ``     @r   check_nan_cumulativez(TestArrayReductions.check_nan_cumulative"  s    "T"6*	3
	
	; A!H)!((2::*>?@  
 	bhhrlbggb"&&!""&&!RVVQ1aA>?Btt$$IIaOar   c                 X    | j                  t               | j                  t               y r   )r  r(   rI  r/  s    r   test_nancumprod_basicz)TestArrayReductions.test_nancumprod_basicE  s     ./!!"23r   c                 X    | j                  t               | j                  t               y r   )r  r2   rI  r/  s    r   test_nancumsum_basicz(TestArrayReductions.test_nancumsum_basicI  s    o.!!/2r   c                 v     t          t        d             fd}d } |       D ]
  } ||        y )NTr   c                 J     |       } |       }j                  ||       y r   r   r:  s      r   r   z1TestArrayReductions.test_ptp_basic.<locals>.checkQ  r;  r   c               3     K   t        j                  d       t        j                  dt         j                  dg       t        j                  t         j                   dg       d d t        j
                  dd       g d t        j                  ddd	      j                  d
dd      } |  t        j                  |        | d d d    t         j                  j                  d      j                  |        |  d d t         j                    d dt         j                  g dt         j                  g d t        j
                  dt         j                         dt         j                  dz  z    t         j                  t         j                  dz  z    t         j                   y w)Nr   g皙@r   )r~  r   r   )r   )rQ  gffffffr  r  r~  r   r   r   r  g      @y      ?      @))gffffff@r   gffffff)g333333@g@g@r   r   )r   r   r  r   r   rG  r  r   rD  r   RandomStater  r   s    r   rF  z8TestArrayReductions.test_ptp_basic.<locals>.a_variationsV  sP    ))B-((D"&&#.//((RVVGQ<((OJ''!Q-""CR(00Aq9AG##A&&DbD'MII!!!$,,Q/GGI66'ML--55''!RVV$$bffrk/!&&266B;&&&&Ls   GG)r   r   )r   r   rF  r   r   r   s   `   @@r   test_ptp_basicz"TestArrayReductions.test_ptp_basicM  s8    !"T"6*	3
	4 A!H  r   c                     t         } t        d      |      }t        j                  d      } ||      } ||      }| j	                  ||       y )NTr   r   )r   r   r   r   r   )r   r   r   r   r  r  s         r   test_ptp_methodz#TestArrayReductions.test_ptp_methods  sI     "T"6*IIbM!9Ah#.r   c                 t   	 t         	 t        d      	      	 fd}dd}t        ddgd      D ]  \  }} |||      } ||        t        j                  d      }t        j
                  d	d
      }|d|z  z   } ||       |d|z  z
  } ||       t        j                  dd      } ||       y )NTr   c                 J     |       } |       }j                  ||       y r   r   r:  s      r   r   z3TestArrayReductions.test_ptp_complex.<locals>.check  r;  r   Fc                     t        j                  ddd      }| rt         j                  |dd t        j                  ddd      }|rt         j                  |dd |d	|z  z   j                  dd      S )
Nr~     rv  r  r   rw  r   r   )r   r  r   r   )real_nanimag_nanrealimags       r   
make_arrayz8TestArrayReductions.test_ptp_complex.<locals>.make_array  sf    ;;r1b)DFFQq	;;r1b)DVVQr
29$--a33r   r   )repeatr  rZ  r~  r   )r~  r~  y      ?      )
fill_value)FF)r   r   r   r   onesr   rG  )
r   r   r`  r\  r]  compr^  r_  r   r   s
   `       @@r   test_ptp_complexz$TestArrayReductions.test_ptp_complex  s    !"T"6*	3
	4 #*4-"BHhh1D$K #C wwqzyyQb4idb4idwwv63dr   c                    t         } t        d      |      }| j                          | j                         5 } |t	        j
                  d             d d d        d}| j                  |t        j                               | j                  t              5 } |t	        j
                  g              d d d        d}| j                  |t        |j                               y # 1 sw Y   xY w# 1 sw Y   =xY w)NTr   )TTFz+Boolean dtype is unsupported (as per NumPy)z&zero-size array reduction not possible)r   r   rL  r   r   r  r  r  r  rM  r  )r   r   r   r   msgs        r   test_ptp_exceptionsz'TestArrayReductions.test_ptp_exceptions  s    !"T"6* 	!##%"((./0 & <c3q{{+,z*a"((2, + 7c3q{{+, &% +*s   C%C1%C.1C:c                    	 t         t        f}|D ]  	 t        d      	      	 fd}t        j                  ddd      }|d   |d d |d	z  }||d
z  z
  } ||       t        d      D ]  } j                  j                  |        j                  j                  |        j                  j                  t        j                  t        j                  g      }||d
z  z
  }|d   |d d  ||j                  |               y )NTr   c                 J     |       } |       }j                  ||       y r   r   r:  s      r   r   z=TestArrayReductions.test_min_max_complex_basic.<locals>.check  %    !!9Ah''#6r   rR  r   (   r   r~  r   r   )rS   r[   r   r   r  r  r   r  r  r   r9  r  )
r   pyfuncsr   r^  r_  r   _r   r   r   s
   `       @@r   test_min_max_complex_basicz.TestArrayReductions.test_min_max_complex_basic  s    "$44F&C&v.E7
 ;;sB+DBxD!H!8Dtby A!H2Y##D)##D)**BLL"--+HI4"9$""1ahhuo&  r   c                     t         t        f}|D ]   t        d             fd}t        j                  ddd      }|d   |d d t        j
                  |d	d
 |dz  }t        j
                  |dd ||dz  z
  } ||       t        d      D ]P  } j                  j                  |        j                  j                  |       ||dz  z
  }|d   |d d  ||       R  y )NTr   c                 J     |       } |       }j                  ||       y r   r   r:  s      r   r   zCTestArrayReductions.test_nanmin_nanmax_complex_basic.<locals>.check  rk  r   rR  r   rl  r   r~  r   rv  r   rw  r   r   )	rr   ru   r   r   r  r   r  r   r  )	r   rm  r   r^  r_  r   rn  r   r   s	   `      @@r    test_nanmin_nanmax_complex_basicz4TestArrayReductions.test_nanmin_nanmax_complex_basic  s    ,F&C&v.E7
 ;;sB+DBxD!HD1I!8DD2Jtby A!H2Y##D)##D)4"9$""1a ! r   c                      t         t        f} fd}d }|D ](   t        d             |       D ]
  } ||        * y )Nc                 J     |       } |       }j                  ||       y r   r   r:  s      r   r   zFTestArrayReductions.test_nanmin_nanmax_non_array_inputs.<locals>.check  r;  r   c               3   "  K   g d d t        j                  d       d d d t         j                  dddf t         j                  t         j                  t         j                   g t         j                  d	fd
g y w)N)r   r  r~  r   ))rR  r~  i)r      ir   r  gA`"	@Fgr   g?)ggffffff!@)r   r  r   r   rE  r   r   rF  zMTestArrayReductions.test_nanmin_nanmax_non_array_inputs.<locals>.a_variations  sp     00((1+JKK665$,,66266BFF7++FFC=+..s   BBTr   )rr   ru   r   )r   rm  r   rF  r   r   r   s   `    @@r   #test_nanmin_nanmax_non_array_inputsz7TestArrayReductions.test_nanmin_nanmax_non_array_inputs  sG    ,	3
		/ F&C&v.E!^a $ r   c                    t        j                  g d      }t        j                  d      j                  dd      }|dxx   dz  cc<   t        j                  d      j                  dddd	      d
z   }|dxx   dz  cc<   |dxx   dz  cc<   |||fD ]  }t	        t        |j                              t        |j                        D cg c]  }|dz    
 c}z   }|D cg c]  }|fd	 }}|D 	cg c]  }	 t        d      |	       }
}	|
D ])  }| j                  |j                  |       ||             +  y c c}w c c}w c c}	w )Nr      r   r~  r  r   r   r   r   r  x   r~  r   r   r   r   r   r   r   r   r   r   3   r   c                 0    t        j                  | |      S Naxisrk   r   _axiss     r   <lambda>z?TestArrayReductions.test_argmax_axis_1d_2d_4d.<locals>.<lambda>      bii&>r   Tr   
r   r  r   r   listr  r  r   r   py_funcr   arr1darr2darr4dr   r  axesr  py_functionsr   c_functionsr   s               r   test_argmax_axis_1d_2d_4dz-TestArrayReductions.test_argmax_axis_1d_2d_4d  Q   '		!$$Q*c
c
		#&&q!Q2R7jS jR5%(Cchh( %chh, /1!A#, D
 ! D !%>   
 :F9Ev"T"6*   %''c(:E#JG % ),   
D> E2Ec                     t        j                  d      }t        j                  d      j                  dd      }t        d      d         fd} ||d        ||d	        ||d
        ||d        j	                          y )Nr  r   r   Tr   c                 .    t        j                  | |      S r   rk   r   r  s     r   	jitargmaxzDTestArrayReductions.test_argmax_axis_out_of_range.<locals>.jitargmax      99S$''r   c                     j                  t        d      5  j                  | |       d d d        j                  t        d      5   | |       d d d        y # 1 sw Y   2xY w# 1 sw Y   y xY wNzaxis.*out of boundsassertRaisesRegexr  r  )r   r  r  r   s     r   assert_raiseszHTestArrayReductions.test_argmax_axis_out_of_range.<locals>.assert_raises  _    ''
4IJ!!#t, K''
4IJ#t$ KJ KJJJ   A	
A(A%(A1r   r6  r   r   r   r   rL  )r   r  r  r  r  s   `   @r   test_argmax_axis_out_of_rangez1TestArrayReductions.test_argmax_axis_out_of_range  s|    		!		!$$Q*	d		( 
	(	% 	eQeR eR eQ!r   c                     t        j                  d      }t        d      d        }| j                         5 } ||d       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr  Tr   c                 .    t        j                  | |      S r   rk   r  s     r   r  zGTestArrayReductions.test_argmax_axis_must_be_integer.<locals>.jitargmax-  r  r   fooaxis must be an integerr   r   r   r   r  r  r  )r   r   r  r   s       r    test_argmax_axis_must_be_integerz4TestArrayReductions.test_argmax_axis_must_be_integer*  f    iil	d		( 
	( ##%c5! &/Q[[1AB &%   
A00A9c                     t        j                  d      j                  dd      fd}| j                   |        t	        d      |                   y )Nr  r   r   c                 (    j                  d      S Nr   r  rg   r   r  s    r   rh   z;TestArrayReductions.test_argmax_method_axis.<locals>.argmax8      <<Q<''r   Tr   r   r   r   r   r   r   rh   r  s     @r   test_argmax_method_axisz+TestArrayReductions.test_argmax_method_axis5  P    		!$$Q*	( 	u : 2T 26 :5 A	Cr   c                     t        j                  dt         j                        j                  dd      fd}| j	                   |        t        d      |                   y )Nr  r   r   r   c                 (    j                  d      S r  rg   r  s    r   rh   z;TestArrayReductions.test_argmax_return_type.<locals>.argmaxB  r  r   Tr   r   r   r  r   r   r   r  s     @r   test_argmax_return_typez+TestArrayReductions.test_argmax_return_type>  W    		!288,44Q:	( 	u : 2T 26 :5 A	Cr   c                    t        j                  g d      }t        j                  d      j                  dd      }|dxx   dz  cc<   t        j                  d      j                  dddd	      d
z   }|dxx   dz  cc<   |dxx   dz  cc<   |||fD ]  }t	        t        |j                              t        |j                        D cg c]  }|dz    
 c}z   }|D cg c]  }|fd	 }}|D 	cg c]  }	 t        d      |	       }
}	|
D ])  }| j                  |j                  |       ||             +  y c c}w c c}w c c}	w )Nry  r  r   r   r{  r  r|  r~  r   r   r}  r~  r  r   c                 0    t        j                  | |      S r  rd   r  s     r   r  z?TestArrayReductions.test_argmin_axis_1d_2d_4d.<locals>.<lambda>V  r  r   Tr   r  r  s               r   test_argmin_axis_1d_2d_4dz-TestArrayReductions.test_argmin_axis_1d_2d_4dH  r  r  c                     t        j                  d      }t        j                  d      j                  dd      }t        d      d         fd} ||d        ||d	        ||d
        ||d        j	                          y )Nr  r   r   Tr   c                 .    t        j                  | |      S r   rd   r  s     r   	jitargminzDTestArrayReductions.test_argmin_axis_out_of_range.<locals>.jitargminc  r  r   c                     j                  t        d      5  j                  | |       d d d        j                  t        d      5   | |       d d d        y # 1 sw Y   2xY w# 1 sw Y   y xY wr  r  )r   r  r  r   s     r   r  zHTestArrayReductions.test_argmin_axis_out_of_range.<locals>.assert_raisesg  r  r  r   r  r6  r  )r   r  r  r  r  s   `   @r   test_argmin_axis_out_of_rangez1TestArrayReductions.test_argmin_axis_out_of_range_  s~    		!		!$$Q*	d		( 
	(	% 	eQeR eR eQ 	!r   c                     t        j                  d      }t        d      d        }| j                         5 } ||d       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)Nr  Tr   c                 .    t        j                  | |      S r   rd   r  s     r   r  zGTestArrayReductions.test_argmin_axis_must_be_integer.<locals>.jitargminx  r  r   r  r  r  )r   r   r  r   s       r    test_argmin_axis_must_be_integerz4TestArrayReductions.test_argmin_axis_must_be_integeru  r  r  c                     t        j                  d      j                  dd      fd}| j                   |        t	        d      |                   y )Nr  r   r   c                 (    j                  d      S r  r`   r  s    r   ra   z;TestArrayReductions.test_argmin_method_axis.<locals>.argmin  r  r   Tr   r  r   ra   r  s     @r   test_argmin_method_axisz+TestArrayReductions.test_argmin_method_axis  r  r   c                     t        j                  dt         j                        j                  dd      fd}| j	                   |        t        d      |                   y )Nr  r   r   r   c                 (    j                  d      S r  r`   r  s    r   ra   z;TestArrayReductions.test_argmin_return_type.<locals>.argmin  r  r   Tr   r  r  s     @r   test_argmin_return_typez+TestArrayReductions.test_argmin_return_type  r  r   c                     t         t        t        t        t        t
        t        t        t        t        t        t        t        t        t        t        t         t"        t$        t&        t(        t*        t,        g}t.        t0        t2        t4        g}|t6        t8        t:        gz  }|t<        gz  }t>        j@                  t>        jB                  t>        jD                  t>        jF                  g} fd} ||d d |        |||       y )Nc                     | D ]t  }t        |      }t        ||      D ]X  \  }d}|j                  j                  |j                  j
                  |j                        }||ffd	}t        ||       Z v y )Nztest_{0}_{1}_{2}dc                     d}dj                   v rt        j                  |      rd}t        ||      \  }}| j	                  |||d|       y )Nr   r:   r   single)rg  rS  ulps)r  r   iscomplexobjr   r   )r   redFunc	testArraytestNamer  rF  rG  red_funcs          r   new_test_functionz]TestArrayReductions.install_generated_tests.<locals>.install_tests.<locals>.new_test_function  sZ      !!X%6%66OOI6 $%D#27I#FS//Sh5=D 0 Jr   )r   r   formatr  r   namer  setattr)	dtypesfuncsdttest_arraysr   	test_namer  r  clss	          @r   install_testszBTestArrayReductions.install_generated_tests.<locals>.install_tests  s    .r2,3E;,G(Hj 3I ) 0 01B1B1;1A1A1F1F1;!BI 9A4>3<J C,=>+ -H r   r   )$r6   r8   r;   r>   rB   rD   rG   rI   rL   rN   r   r   r   r   rQ   rS   r^   rV   rY   r[   ru   rr   r{   rb   re   ri   rl   rx   r   r   r~   r   r   r   r   r   )r  reduction_funcsreduction_funcs_rspacedtypes_to_testr  s   `    r   install_generated_testsz+TestArrayReductions.install_generated_tests  s    
 %&6%'8%'8$&6$&6$&6$&6$&6%z$&6''  #/0C".0C"E 	M<FFM?*((BJJ",,G	?8 	nSb)+AB 	no6r   )r  )F)jr  
__module____qualname____doc__r   r   r   r  r   r  r  r"  r   r'  r*  r-  r0  r2  r;  rC  rH  rJ  rO  rT  rV  rX  rZ  r\  r^  r`  rc  re  rg  ri  rl  rn  rp  rr  r  staticmethodr  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/  r1  r3  r5  r7  rI  rK  rM  rT  r   rV  re  rh  ro  rr  rw  r  r  r  r  r  r  r  r  r  r  classmethodr  __classcell__)r   s   @r   r   r      s8   4"H: %. "'R %. " 'R./*!X6(	.6 =.5/5/11112121@8  4?;B,\K4K411//@21;=!,	/,3-4*&;>HJMI<;;9400**--4*-+!F43$L 	/ 	/@-&'242H."*	CCCH.",	CCC ;7 ;7r   r   c                   F    e Zd Z ej                  d      Zd Zed        Zy)TestArrayReductionsExceptionsr   c                    | j                           t        d      |      }| j                  t              5   || j                         d d d        | j                  t
              5 } || j                         d d d        | j                  |t        j                               y # 1 sw Y   _xY w# 1 sw Y   ;xY w)NTr   )	rL  r   rM  BaseException	zero_sizer  r  r  r  )r   r   rg  r   r   s        r   check_exceptionz-TestArrayReductionsExceptions.check_exception  s    !"T"6*}-4>>" . z*a$..! +c3q{{+, .- +*s   B)(B5)B25B>c                    t               }d}d}t        t        t        t        fD ]  }|||<   	 t
        t
        t        t        fD ]  }|||<   	 d}|j                         D ]p  \  }}|j                  |j                        }|j                  |j                        }	|	j                  dd      j                  dd      }	||	fd}
t        | ||
       r y )Nz'attempt to get {0} of an empty sequencez*zero-size array to reduction operation {0}ztest_zero_size_array_{0}array_ _globalc                 (    | j                  ||       y r   )r  )r   funcmessages      r   test_fnz6TestArrayReductionsExceptions.install.<locals>.test_fn  s    $$T73r   )dictri   rl   rb   re   rY   rQ   itemsr  r  r=  r  )r  	fn_to_msg	empty_seqop_no_identr  name_templatefnrg  r  lmsgr  s              r   installz%TestArrayReductionsExceptions.install  s     F	=	 3\%'A$IaL' Y	9=A&IaL > 3 (GB%,,R[[9I::bkk*D<<,44YrBD#%t 4 CG, )r   N)	r  r  r  r   r   r  r  r  r  rE  r   r   r  r    s,     		!I- - -r   r  __main__)H	itertoolsr   r   numpyr   numbar   r   r   r   numba.np.numpy_supportr	   numba.tests.supportr
   r   r   r   unittestr   r   r   r   r"   r$   r(   r+   r.   r2   r6   r8   r;   r>   rB   rD   rG   rI   rL   rN   rQ   rS   rV   rY   r[   r^   rb   re   ri   rl   ro   rr   ru   rx   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  mainrE  r   r   <module>r
     sc   <  * * 0 O O !$""(&P7/8 P7f(  + + -(-OX (-T  % % ' zHMMO r   