
    qiZ                        d dl mZmZ d dlZd dl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$ Z/d% Z0d& Z1d' Z2d( Z3d) Z4d* Z5d+ Z6d, Z7d- Z8d. Z9d/ Z:d0 Z;d1 Z<d2 Z=d3 Z>d4 Z?d5 Z@ G d6 d7ee      ZAeAj                           G d8 d9ee      ZCeCj                          eEd:k(  r ej                          yy);    )productcombinations_with_replacementN)jitnjittypeof)numpy_version)TestCaseMemoryLeakMixintagskip_if_numpy_2c                 "    | j                         S N)allarrs    S/opt/pipecat/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_nancumsumr1   &       <<r   c                 "    | j                         S r   )sumr   s    r   	array_sumr5   )   r   r   c                 ,    t        j                  |       S r   )r   r4   r   s    r   array_sum_globalr7   ,   r   r   c                 "    | j                         S r   )prodr   s    r   
array_prodr:   /       88:r   c                 ,    t        j                  |       S r   )r   r9   r   s    r   array_prod_globalr=   2       773<r   c                 "    | j                         S r   )meanr   s    r   
array_meanrA   5   r;   r   c                 ,    t        j                  |       S r   )r   r@   r   s    r   array_mean_globalrC   8   r>   r   c                 "    | j                         S r   )varr   s    r   	array_varrF   ;   r   r   c                 ,    t        j                  |       S r   )r   rE   r   s    r   array_var_globalrH   >   r   r   c                 "    | j                         S r   )stdr   s    r   	array_stdrK   A   r   r   c                 ,    t        j                  |       S r   )r   rJ   r   s    r   array_std_globalrM   D   r   r   c                 "    | j                         S r   )minr   s    r   	array_minrP   G   r   r   c                 ,    t        j                  |       S r   )r   rO   r   s    r   array_min_globalrR   J   r   r   c                 ,    t        j                  |       S r   )r   aminr   s    r   
array_aminrU   M   r>   r   c                 "    | j                         S r   )maxr   s    r   	array_maxrX   P   r   r   c                 ,    t        j                  |       S r   )r   rW   r   s    r   array_max_globalrZ   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_argminra   Y   r+   r   c                 ,    t        j                  |       S r   r   r`   r   s    r   array_argmin_globalrd   \   r.   r   c                 "    | j                         S r   argmaxr   s    r   array_argmaxrh   _   r+   r   c                 ,    t        j                  |       S r   r   rg   r   s    r   array_argmax_globalrk   b   r.   r   c                 ,    t        j                  |       S r   )r   medianr   s    r   array_median_globalrn   e   r.   r   c                 ,    t        j                  |       S r   )r   nanminr   s    r   array_nanminrq   h   r.   r   c                 ,    t        j                  |       S r   )r   nanmaxr   s    r   array_nanmaxrt   k   r.   r   c                 ,    t        j                  |       S r   )r   nanmeanr   s    r   array_nanmeanrw   n   r$   r   c                 ,    t        j                  |       S r   )r   nansumr   s    r   array_nansumrz   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   }   r2   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2!q2v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                   J    e Zd ZdZ f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ed        Zd Z d Z!dXd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- Z2dYd.Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4 Z9d5 Z:d6 Z;d7 Z<d8 Z=d9 Z>d: Z?d; Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIdE ZJdF ZKeLdG        ZMdH ZNdI ZOdJ ZPdK ZQdL ZRdM ZSdN ZTdO ZUdP ZVdQ ZWdR ZXdS ZYdT ZZdU Z[dV Z\e]dW        Z^ xZ_S )Z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   s"    #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                 $     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>.check   %     ~H*C##C2r   TTTTFTr   r   r   r   r   r   hello)r   r   r   arrayassertTypingErrorr   r   er   s   `  @r   test_array_allz"TestArrayReductions.test_array_all   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
                          |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>.check  &    ',H*C##C2r   r   皙?Fr   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_all      "T"#34	3 	bjjobjjobhhtnbhhuo 	bffbffrvvgd 	bhh)*+bhh*+,bhh'(bhh'(##% 	'N	 	 	   E..E7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>.check!  r   r   )r   r   r   r   r   r   r   r   r   r   r   r   s   ``  @r   test_any_basicz"TestArrayReductions.test_any_basic  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>.check2  r   r   r   r   r   r   r   )r   r   r   r   r   r   s   `  @r   test_array_anyz"TestArrayReductions.test_array_any0  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
                          |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>.checkC  r  r   r   r  Fr   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   r5   r   s    r   test_sum_basicz"TestArrayReductions.test_sum_basic]      ""9-r   c                 .    | j                  t               y r   )r   rA   r  s    r   test_mean_basicz#TestArrayReductions.test_mean_basic`  s    "":.r   c                 2    | j                  t        d       y Ndouble)prec)r   rF   r  s    r   test_var_basicz"TestArrayReductions.test_var_basicc  s    ""98"<r   c                 .    | j                  t               y r   )r   rK   r  s    r   test_std_basicz"TestArrayReductions.test_std_basicf  r  r   c                 .    | j                  t               y r   )r   rP   r  s    r   test_min_basicz"TestArrayReductions.test_min_basici  r  r   c                 .    | j                  t               y r   )r   rX   r  s    r   test_max_basicz"TestArrayReductions.test_max_basicl  r  r   c                 .    | j                  t               y r   )r   ra   r  s    r   test_argmin_basicz%TestArrayReductions.test_argmin_basico      ""<0r   c                 .    | j                  t               y r   )r   rh   r  s    r   test_argmax_basicz%TestArrayReductions.test_argmax_basicr  r(  r   c                 .    | j                  t               y r   )r   rq   r  s    r   test_nanmin_basicz%TestArrayReductions.test_nanmin_basicu  r(  r   c                 .    | j                  t               y r   )r   rt   r  s    r   test_nanmax_basicz%TestArrayReductions.test_nanmax_basicx  r(  r   c                 .    | j                  t               y r   )r   rw   r  s    r   test_nanmean_basicz&TestArrayReductions.test_nanmean_basic{      ""=1r   c                 .    | j                  t               y r   )r   rz   r  s    r   test_nansum_basicz%TestArrayReductions.test_nansum_basic~  r(  r   c                 .    | j                  t               y r   )r   r}   r  s    r   test_nanprod_basicz&TestArrayReductions.test_nanprod_basic  r1  r   c                 .    | j                  t               y r   )r   r   r  s    r   test_nanstd_basicz%TestArrayReductions.test_nanstd_basic  r(  r   c                 2    | j                  t        d       y r  )r   r   r  s    r   test_nanvar_basicz%TestArrayReductions.test_nanvar_basic  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>.check  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_odd  s*    !H		&!A!H!##Jr   ?   g      %@c                 l     |        | j                  d      }  |         | j                         y )N)      r?  rA  s    r   
check_evenz:TestArrayReductions.check_median_basic.<locals>.check_even  s*    !H		'"A!H!##Jr   @   )r   r   r   r   )r   r   array_variationsrB  r   rG  r   r   s   ``    @@r   check_median_basicz&TestArrayReductions.check_median_basic  s    "T"6*	3 	bhhrl	
 ""))B-$"67 	AaL		
 ""))B-$"67 	AqM	r   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         @rE  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   rL  rE  r   )rM  r   r   rN  r   s    r   
variationsz9TestArrayReductions.test_median_basic.<locals>.variations  sP     G$B$AGIIa GAa!eqjMGs   AA)rn   rJ  )r   r   rR  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   rW  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   rE  r            ?r   rL  g      ?r   rE  )      ?r`  r   )g      @      @g      &@ih     )ra  r`  r   )ra  r`  g      ?)r   rb  r  r   )r   r   rE  r   )g-q=)r   r   randnr   r   linspacer   r   choiceflatrN  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 rV  rX  rZ  s	         r   r   z>TestArrayReductions.check_percentile_edge_cases.<locals>.check  r\  r   c                      | |      j                  t        j                        } | |      }j                  |||       y rV  )astyper   r   r   )r   r   rW  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  s?     1b\ )9(AF )D((4.())s   ;=r   皙?r  r   r   r   r   )g+=)r   r   r   r   r   )r   r   rq  r   ry  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$\2 	A!QK	
 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]assertRaises
ValueErrorassertEqualstr	exceptionr   r   raisesr   r   s      r   	check_errzBTestArrayReductions.check_percentile_exceptions.<locals>.check_err6  sP    "":. &a;F$$%    
AAr   )r   r   i   r   r   r   r  Not supported for complex dtype	r   disable_leak_checkr   r   r   r   assertInr  r  r   r   r  r   r  r   r   s   `     @r   check_percentile_exceptionsz/TestArrayReductions.check_percentile_exceptions3  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_errP  sP    "":. &a7F$$% r  r   g      )r  r  g?r  r   r  r  r  s   `     @r   check_quantile_exceptionsz-TestArrayReductions.check_quantile_exceptionsM  s    "T"6*	 	!IIaL!T!&'!c4()##% 			!r!AA!QK	
 	7Q[[9IJ	 	r  c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y Nd   rq  )r   rt  r  r  r   r   s     r   test_percentile_basicz)TestArrayReductions.test_percentile_basicg  s;    (**6*E((s(C((0r   c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y r  )r   rt  r  r  r  s     r   test_nanpercentile_basicz,TestArrayReductions.test_nanpercentile_basicm  s;    +**6*E((s(C((0r   c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y Nr   r  )r   rt  r  r  r  s     r   test_quantile_basicz'TestArrayReductions.test_quantile_basics  s;    &**6*C((q(A&&v.r   c                 ~    t         }| j                  |d       | j                  |d       | j                  |       y r  )r   rt  r  r  r  s     r   test_nanquantile_basicz*TestArrayReductions.test_nanquantile_basicy  s;    )**6*C((q(A&&v.r   c                 H    t         }| j                  || j                         y r   )r   rJ  rO  r  s     r   test_nanmedian_basicz(TestArrayReductions.test_nanmedian_basic  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   int32r   r  ndimlayoutr   r7   r4   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:   r9   r  s       r   test_array_prod_int_1dz*TestArrayReductions.test_array_prod_int_1d  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:   rl  assert_allcloser9   r  s       r   test_array_prod_float_1dz,TestArrayReductions.test_array_prod_float_1d  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=   rl  r  r9   r  s       r   test_array_prod_globalz*TestArrayReductions.test_array_prod_global  sz    ii"((+sQ's+eX01


""2773<s<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_  rc  )r   r   )r   r   int16r   r   rf  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            int64uint64N)r   r   rx  r   r   )r   r   is_prodn_itemsr   nprnbrs          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  r5   r7   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  r1   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  rA   rC   r  s    r   test_mean_magnitudez'TestArrayReductions.test_mean_magnitude  s    ((4(():;r   c                 X    | j                  t               | j                  t               y r   )r  rF   rH   r  s    r   test_var_magnitudez&TestArrayReductions.test_var_magnitude  r  r   c                 X    | j                  t               | j                  t               y r   )r  rK   rM   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   rm   r   r   NaT)r   r   r   rM  r   r   rN  __name__r{  lenfillr   )r   r   r   r  r   rs  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   rx  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  rP   r  r  s    r   test_min_npdatetimez'TestArrayReductions.test_min_npdatetime      i(y)r   c                 X    | j                  t               | j                  t               y r   )r  rX   r  r  s    r   test_max_npdatetimez'TestArrayReductions.test_max_npdatetime  r  r   c                 X    | j                  t               | j                  t               y r   )r  ra   r  r  s    r   test_argmin_npdatetimez*TestArrayReductions.test_argmin_npdatetime      l+|,r   c                 X    | j                  t               | j                  t               y r   )r  rh   r  r  s    r   test_argmax_npdatetimez*TestArrayReductions.test_argmax_npdatetime!  r  r   c                 .    | j                  t               y r   )r  rn   r  s    r   test_median_npdatetimez*TestArrayReductions.test_median_npdatetime%  s    23r   c                 .    | j                  t               y r   )r  r5   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  rA   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>.check4  %    ayH(C##Hc2r   c                     | j                   dz  }t        j                  | t        j                  j	                  t        | j                         |d      t        j                         | S )Nr   F)replace)sizer   putr   rg  r{  r   )r   ps     r   _set_some_values_to_nanzITestArrayReductions.check_nan_cumulative.<locals>._set_some_values_to_nan9  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   <   rE  r   )TTTFr   r   rH  gfffff@@r   )r   rf  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   rE  r   rc  r>  r_  r=  r   r   r   )r   rx  r   r   r   fullr   r   )r   r   r   r
  r  r   partsr   s   ``     @r   check_nan_cumulativez(TestArrayReductions.check_nan_cumulative1  s    "T"6*	3
	
	;  	AA!H)!((2::*>?@	A
 	bhhrlbggb"&&!""&&!RVVQ1aA>?Btt$$IIaOar   c                 X    | j                  t               | j                  t               y r   )r  r'   r  r  s    r   test_nancumprod_basicz)TestArrayReductions.test_nancumprod_basicT  s     ./!!"23r   c                 X    | j                  t               | j                  t               y r   )r  r1   r  r  s    r   test_nancumsum_basicz(TestArrayReductions.test_nancumsum_basicX  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>.check`  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   )rE  r   r   )r   )r  gffffffr  rF  rE  r   r   r   rc  g      @y      ?      @))gffffff@r   gffffff)g333333@g@g@r   r   )r   r   r   r   r   r  rf  r   r  r   RandomStaterN  r   s    r   r  z8TestArrayReductions.test_ptp_basic.<locals>.a_variationse  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   r  r   r   r   s   `   @@r   test_ptp_basicz"TestArrayReductions.test_ptp_basic\  s=    !"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_method  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 )
NrE     r=  r  r   r>  r   r   )r   rf  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_  r#  rE  r   )rE  rE  y      ?      )
fill_value)FF)r   r   r   r   onesr   r  )
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	 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   r  r   r   r   r  r  r  r  r  )r   r   r   r  msgs        r   test_ptp_exceptionsz'TestArrayReductions.test_ptp_exceptions  s    !"T"6* 	!##% 	1"((./0	1 <c3q{{+,z* 	 a"((2,	  7c3q{{+,	1 	1	  	 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   r  r   (   r   rE  r   r   )rR   rZ   r   r   rf  r{  r   rN  rg  r   
complex128rx  )
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  r4  r   r  r   r5  r   rE  r   r=  r   r>  r   r   )	rq   rt   r   r   rf  r   r{  r   rN  )	r   r7  r   r'  r(  r   r8  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   rc  rE  r   ))r  rE  i)r      ir   rd  gA`"	@Fgr   g?)ggffffff!@)r   r   r   r   r  r   r   r  zMTestArrayReductions.test_nanmin_nanmax_non_array_inputs.<locals>.a_variations  sp     00((1+JKK665$,,66266BFF7++FFC=+..s   BBTr   )rq   rt   r   )r   r7  r   r  r   r   r   s   `    @@r   #test_nanmin_nanmax_non_array_inputsz7TestArrayReductions.test_nanmin_nanmax_non_array_inputs  sQ    ,	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   rE  rc  r   r   r   r   r  x   rE  r   r   r   r   r   r   r   r   r   r   3   r   c                 0    t        j                  | |      S Naxisrj   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}  axesrM  py_functionsr   c_functionsr   s               r   test_argmax_axis_1d_2d_4dz-TestArrayReductions.test_argmax_axis_1d_2d_4d  V   '		!$$Q*c
c
		#&&q!Q2R7jS jR5%( 	HCchh( %chh,!A#, D
 ! !%>L 
 :F/5"T"6*K  % H''c(:E#JGH	H,   
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 )Nrc  r   r   Tr   c                 .    t        j                  | |      S r   rj   r   rM  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  rT  )r   rM  rb  r   s     r   assert_raiseszHTestArrayReductions.test_argmax_axis_out_of_range.<locals>.assert_raises,  n    ''
4IJ -!!#t,-''
4IJ %#t$% %- -% %   A	
A(A%(A1r   r   r   r   r   r  )r   rV  rW  rh  rb  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)Nrc  Tr   c                 .    t        j                  | |      S r   rj   ra  s     r   rb  zGTestArrayReductions.test_argmax_axis_must_be_integer.<locals>.jitargmax<  rc  r   fooaxis must be an integerr   r   r   r   r  r  r  )r   r   rb  r  s       r    test_argmax_axis_must_be_integerz4TestArrayReductions.test_argmax_axis_must_be_integer9  m    iil	d		( 
	( ##% 	"c5!	"/Q[[1AB	" 	"   
A00A9c                     t        j                  d      j                  dd      fd}| j                   |        t	        d      |                   y )Nrc  r   r   c                 (    j                  d      S Nr   rL  rf   r   rW  s    r   rg   z;TestArrayReductions.test_argmax_method_axis.<locals>.argmaxG      <<Q<''r   Tr   r   r   r   r   r   r   rg   rW  s     @r   test_argmax_method_axisz+TestArrayReductions.test_argmax_method_axisD  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 )Nrc  r   r   r   c                 (    j                  d      S ry  rf   rz  s    r   rg   z;TestArrayReductions.test_argmax_return_type.<locals>.argmaxQ  r{  r   Tr   r   r   uint8r   r   r   r}  s     @r   test_argmax_return_typez+TestArrayReductions.test_argmax_return_typeM  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 )NrC  rc  r   r   rE  r  rF  rE  r   r   rG  rH  rI  r   c                 0    t        j                  | |      S rK  rc   rN  s     r   rP  z?TestArrayReductions.test_argmin_axis_1d_2d_4d.<locals>.<lambda>e  rQ  r   Tr   rR  rU  s               r   test_argmin_axis_1d_2d_4dz-TestArrayReductions.test_argmin_axis_1d_2d_4dW  r]  r^  c                     t        j                  d      }t        j                  d      j                  dd      }t        d      d         fd} ||d        ||d	        ||d
        ||d        j	                          y )Nrc  r   r   Tr   c                 .    t        j                  | |      S r   rc   ra  s     r   	jitargminzDTestArrayReductions.test_argmin_axis_out_of_range.<locals>.jitargminr  rc  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re  rf  )r   rM  r  r   s     r   rh  zHTestArrayReductions.test_argmin_axis_out_of_range.<locals>.assert_raisesv  ri  rj  r   rk  rl  rm  )r   rV  rW  rh  r  s   `   @r   test_argmin_axis_out_of_rangez1TestArrayReductions.test_argmin_axis_out_of_rangen  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)Nrc  Tr   c                 .    t        j                  | |      S r   rc   ra  s     r   r  zGTestArrayReductions.test_argmin_axis_must_be_integer.<locals>.jitargmin  rc  r   rq  rr  rs  )r   r   r  r  s       r    test_argmin_axis_must_be_integerz4TestArrayReductions.test_argmin_axis_must_be_integer  ru  rv  c                     t        j                  d      j                  dd      fd}| j                   |        t	        d      |                   y )Nrc  r   r   c                 (    j                  d      S ry  r_   rz  s    r   r`   z;TestArrayReductions.test_argmin_method_axis.<locals>.argmin  r{  r   Tr   r|  r   r`   rW  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 )Nrc  r   r   r   c                 (    j                  d      S ry  r_   rz  s    r   r`   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   r9   r   single)r0  r  ulps)r  r   iscomplexobjr   r   )r   redFunc	testArraytestNamer  r  r  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,=>+??r   r   )$r5   r7   r:   r=   rA   rC   rF   rH   rK   rM   r   r   r   r   rP   rR   r]   rU   rX   rZ   rt   rq   rz   ra   rd   rh   rk   rw   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)`r  
__module____qualname____doc__r   r   r   r   r  r	  r   r  r  r  r  r  r  r!  r#  r%  r'  r*  r,  r.  r0  r3  r5  r7  r9  rJ  staticmethodrO  rS  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r  r.  r1  r9  r<  rA  r\  rn  rt  r~  r  r  r  r  r  r  classmethodr  __classcell__)r   s   @r   r   r      s   4 %. ": %. " :./=...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                 b    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   )r   r  BaseException	zero_sizer  r  r  r  )r   r   r0  r   r  s        r   check_exceptionz-TestArrayReductionsExceptions.check_exception  s    "T"6*}- 	#4>>"	# z* 	"a$..!	"c3q{{+,	# 	#	" 	"s   BB%B"%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   )dictrh   rk   ra   rd   rX   rP   itemsr  r  r  r  )r  	fn_to_msg	empty_seqop_no_identrs  name_templatefnr0  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  r  r   r   r  r    s,     		!I- - -r   r  __main__)G	itertoolsr   r   numpyr   numbar   r   r   numba.np.numpy_supportr   numba.tests.supportr	   r
   r   r   unittestr   r   r   r   r!   r#   r'   r*   r-   r1   r5   r7   r:   r=   rA   rC   rF   rH   rK   rM   rP   rR   rU   rX   rZ   r]   ra   rd   rh   rk   rn   rq   rt   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  mainr  r   r   <module>r     sc   <  # # 0 O O !$""(&_7/8 _7D!  + + -%-OX %-N  % % ' zHMMO r   