U
    iâËdË•  ã                   @   s  d dl mZmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlZdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Z d'd(„ Z!d)d*„ Z"d+d,„ Z#d-d.„ Z$d/d0„ Z%d1d2„ Z&d3d4„ Z'd5d6„ Z(d7d8„ Z)d9d:„ Z*d;d<„ Z+d=d>„ Z,d?d@„ Z-dAdB„ Z.dCdD„ Z/dEdF„ Z0dGdH„ Z1dIdJ„ Z2dKdL„ Z3dMdN„ Z4dOdP„ Z5dQdR„ Z6dSdT„ Z7dUdV„ Z8dWdX„ Z9dYdZ„ Z:d[d\„ Z;d]d^„ Z<d_d`„ Z=dadb„ Z>G dcdd„ ddeeƒZ?e? @¡  G dedf„ dfeeƒZAeA B¡  eCdgk�re D¡  dS )hé    )ÚproductÚcombinations_with_replacementN)ÚjitÚtypeof)Úcompile_isolated)Únumpy_version)ÚTestCaseÚMemoryLeakMixinÚtagc                 C   s   |   ¡ S ©N)Úall©Úarr© r   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_array_reductions.pyÚ	array_all   s    r   c                 C   s
   t  | ¡S r   )Únpr   r   r   r   r   Úarray_all_global   s    r   c                 C   s   |   ¡ S r   )Úanyr   r   r   r   Ú	array_any   s    r   c                 C   s
   t  | ¡S r   )r   r   r   r   r   r   Úarray_any_global   s    r   c                 C   s   |   ¡ S r   )Úcumprodr   r   r   r   Úarray_cumprod   s    r   c                 C   s
   t  | ¡S r   )r   r   r   r   r   r   Úarray_cumprod_global   s    r   c                 C   s
   t  | ¡S r   )r   Z
nancumprodr   r   r   r   Úarray_nancumprod   s    r   c                 C   s   |   ¡ S r   )Úcumsumr   r   r   r   Úarray_cumsum!   s    r   c                 C   s
   t  | ¡S r   )r   r   r   r   r   r   Úarray_cumsum_global$   s    r   c                 C   s
   t  | ¡S r   )r   Z	nancumsumr   r   r   r   Úarray_nancumsum'   s    r   c                 C   s   |   ¡ S r   )Úsumr   r   r   r   Ú	array_sum*   s    r    c                 C   s
   t  | ¡S r   )r   r   r   r   r   r   Úarray_sum_global-   s    r!   c                 C   s   |   ¡ S r   )Úprodr   r   r   r   Ú
array_prod0   s    r#   c                 C   s
   t  | ¡S r   )r   r"   r   r   r   r   Úarray_prod_global3   s    r$   c                 C   s   |   ¡ S r   )Úmeanr   r   r   r   Ú
array_mean6   s    r&   c                 C   s
   t  | ¡S r   )r   r%   r   r   r   r   Úarray_mean_global9   s    r'   c                 C   s   |   ¡ S r   )Úvarr   r   r   r   Ú	array_var<   s    r)   c                 C   s
   t  | ¡S r   )r   r(   r   r   r   r   Úarray_var_global?   s    r*   c                 C   s   |   ¡ S r   )Ústdr   r   r   r   Ú	array_stdB   s    r,   c                 C   s
   t  | ¡S r   )r   r+   r   r   r   r   Úarray_std_globalE   s    r-   c                 C   s   |   ¡ S r   )Úminr   r   r   r   Ú	array_minH   s    r/   c                 C   s
   t  | ¡S r   )r   r.   r   r   r   r   Úarray_min_globalK   s    r0   c                 C   s   |   ¡ S r   )Úmaxr   r   r   r   Ú	array_maxN   s    r2   c                 C   s
   t  | ¡S r   )r   r1   r   r   r   r   Úarray_max_globalQ   s    r3   c                 C   s   |   ¡ S r   ©Úargminr   r   r   r   Úarray_argminT   s    r6   c                 C   s
   t  | ¡S r   ©r   r5   r   r   r   r   Úarray_argmin_globalW   s    r8   c                 C   s   |   ¡ S r   ©Úargmaxr   r   r   r   Úarray_argmaxZ   s    r;   c                 C   s
   t  | ¡S r   ©r   r:   r   r   r   r   Úarray_argmax_global]   s    r=   c                 C   s
   t  | ¡S r   )r   Úmedianr   r   r   r   Úarray_median_global`   s    r?   c                 C   s
   t  | ¡S r   )r   Znanminr   r   r   r   Úarray_nanminc   s    r@   c                 C   s
   t  | ¡S r   )r   Znanmaxr   r   r   r   Úarray_nanmaxf   s    rA   c                 C   s
   t  | ¡S r   )r   Znanmeanr   r   r   r   Úarray_nanmeani   s    rB   c                 C   s
   t  | ¡S r   )r   Znansumr   r   r   r   Úarray_nansuml   s    rC   c                 C   s
   t  | ¡S r   )r   Znanprodr   r   r   r   Úarray_nanprodo   s    rD   c                 C   s
   t  | ¡S r   )r   Znanstdr   r   r   r   Úarray_nanstdr   s    rE   c                 C   s
   t  | ¡S r   )r   Znanvarr   r   r   r   Úarray_nanvaru   s    rF   c                 C   s
   t  | ¡S r   )r   Z	nanmedianr   r   r   r   Úarray_nanmedian_globalx   s    rG   c                 C   s   t  | |¡S r   )r   Z
percentile©r   Úqr   r   r   Úarray_percentile_global{   s    rJ   c                 C   s   t  | |¡S r   )r   ZnanpercentilerH   r   r   r   Úarray_nanpercentile_global~   s    rK   c                 C   s
   t  | ¡S r   )r   Úptp©Úar   r   r   Úarray_ptp_global�   s    rO   c                 C   s   |   ¡ S r   )rL   rM   r   r   r   Ú	array_ptp„   s    rP   c                 C   s   t  | |¡S r   )r   ZquantilerH   r   r   r   Úarray_quantile_global‡   s    rQ   c                 C   s   t  | |¡S r   )r   ZnanquantilerH   r   r   r   Úarray_nanquantile_globalŠ   s    rR   c                    sr   ˆ t jkrdd„ }n‡ fdd„}|dƒ}|dƒ dd¡}|dƒd d d… jd	d
d�}|jjsd|jjrht‚|||gS )Nc                 S   s&   | d dkst ‚t ddg| d  ¡S )Né   r   é   )ÚAssertionErrorr   Úbool_©Únr   r   r   Úfactory�   s    z!base_test_arrays.<locals>.factoryc                    s   t j| ˆ d�d S )N©ÚdtyperT   )r   ÚarangerW   rZ   r   r   rY   “   s    é
   rS   é   é   éÿÿÿÿ)rS   é   rS   ÚA)Úorder)r   rV   ÚreshapeÚflagsÚc_contiguousÚf_contiguousrU   )r[   rY   Za1Za2Úa3r   rZ   r   Úbase_test_arrays�   s    

ri   c                 C   s¤   t | ƒ}| tjkr$|dd„ |D ƒ7 }| tjkr‚g }|D ]@}|d d| d  }t |d d d… ¡|d d d…< | |¡ q6| |¡ |D ]}|jt | ¡ks†t‚q†|S )Nc                 S   s   g | ]}|d  ‘qS )r]   r   )Ú.0rN   r   r   r   Ú
<listcomp>£   s     z$full_test_arrays.<locals>.<listcomp>r]   ù              ð?é   rS   )	ri   r   Úfloat32Ú	complex64ZconjÚappendÚextendr[   rU   )r[   Z
array_listÚaccrN   Útmpr   r   r   Úfull_test_arraysž   s    


rt   c                 C   s.   t |ƒ}t| |gƒ}| |ƒ}| |¡}||fS r   )r   r   Úentry_point)Zcompare_funcÚ
test_arrayÚarrtyÚcresZnumpy_resultZnumba_resultr   r   r   Úrun_comparative²   s
    
ry   c                       s¼  e Zd ZdZ‡ fdd„Zdd„ Zefdd„Zefdd	„Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zed*d+„ ƒZd,d-„ Zd.d/„ Zd¨d1d2„Zd3d4„ Zd5d6„ Z d7d8„ Z!d9d:„ Z"d;d<„ Z#d=d>„ Z$d?d@„ Z%dAdB„ Z&dCdD„ Z'dEdF„ Z(dGdH„ Z)dIdJ„ Z*dKdL„ Z+dMdN„ Z,dOdP„ Z-dQdR„ Z.d©dTdU„Z/dVdW„ Z0dXdY„ Z1dZd[„ Z2d\d]„ Z3d^d_„ Z4d`da„ Z5dbdc„ Z6ddde„ Z7dfdg„ Z8dhdi„ Z9djdk„ Z:dldm„ Z;dndo„ Z<dpdq„ Z=drds„ Z>dtdu„ Z?dvdw„ Z@dxdy„ ZAdzd{„ ZBd|d}„ ZCd~d„ ZDd€d�„ ZEd‚dƒ„ ZFd„d…„ ZGd†d‡„ ZHdˆd‰„ ZIdŠd‹„ ZJdŒd�„ ZKdŽd�„ ZLd�d‘„ ZMd’d“„ ZNd”d•„ ZOd–d—„ ZPd˜d™„ ZQdšd›„ ZRdœd�„ ZSdždŸ„ ZTd d¡„ ZUd¢d£„ ZVd¤d¥„ ZWeXd¦d§„ ƒZY‡  ZZS )ªÚTestArrayReductionszQ
    Test array reduction methods and functions such as .sum(), .max(), etc.
    c                    s   t t| ƒ ¡  tj d¡ d S )Né*   )Úsuperrz   ÚsetUpr   ÚrandomÚseed©Úself©Ú	__class__r   r   r}   À   s    zTestArrayReductions.setUpc              	      s  t dd�ˆƒ‰ ‡ ‡‡‡fdd„}t dddddd	g¡}||ƒ t dd	g¡}||ƒ t d	d
dg¡}||ƒ t d	d
dg¡}||ƒ t d	d
ddg¡}||ƒ t dd	d
ddg¡}||ƒ t dd	d
ddddg¡}||ƒ t ddd	dg¡}||ƒ t ddg¡}||ƒ d S )NT©Znopythonc                    s   ˆj ˆ| ƒˆ | ƒfˆŽ d S r   ©ÚassertPreciseEqualr   ©ÚcfuncÚkwargsÚpyfuncr�   r   r   ÚcheckÇ   s    z8TestArrayReductions.check_reduction_basic.<locals>.checkç      ð?ç       @ç        ç       €g      ø¿g      @Úinfz-infÚnanç      @g      @)r   r   Úfloat64)r�   rŠ   r‰   r‹   r   r   r‡   r   Úcheck_reduction_basicÄ   s(    z)TestArrayReductions.check_reduction_basicc                    sˆ   t dd�ˆƒ‰ ‡ ‡‡fdd„}t ddtdƒtdƒg¡}||ƒ d	|d
< ||ƒ d|d
< ||ƒ | d¡}||ƒ ||d d d… ƒ d S )NTr„   c                    s   ˆ  ˆ| ƒˆ | ƒ¡ d S r   r…   r   ©rˆ   rŠ   r�   r   r   r‹   à   s    z1TestArrayReductions.test_all_basic.<locals>.checkrŒ   rŽ   r�   r‘   r�   rT   ç      ø?©rS   rS   r`   ©r   r   r“   Úfloatrd   ©r�   rŠ   r‹   r   r   r•   r   Útest_all_basicÞ   s    
z"TestArrayReductions.test_all_basicc                    s˜   t dd�ˆƒ‰ ‡ ‡‡fdd„}t ddddg¡}||ƒ tdƒ|d< ||ƒ td	ƒ|d< ||ƒ d
|d< ||ƒ | d¡}||ƒ ||d d d… ƒ d S )NTr„   c                    s   ˆ  ˆ| ƒˆ | ƒ¡ d S r   r…   r   r•   r   r   r‹   ï   s    z1TestArrayReductions.test_any_basic.<locals>.checkrŽ   r�   r‘   rS   r�   r–   r—   r`   r˜   rš   r   r•   r   Útest_any_basicí   s    
z"TestArrayReductions.test_any_basicc                 C   s   |   t¡ d S r   )r”   r    r€   r   r   r   Útest_sum_basicþ   s    z"TestArrayReductions.test_sum_basicc                 C   s   |   t¡ d S r   )r”   r&   r€   r   r   r   Útest_mean_basic  s    z#TestArrayReductions.test_mean_basicc                 C   s   | j tdd� d S ©NÚdouble)Úprec)r”   r)   r€   r   r   r   Útest_var_basic  s    z"TestArrayReductions.test_var_basicc                 C   s   |   t¡ d S r   )r”   r,   r€   r   r   r   Útest_std_basic  s    z"TestArrayReductions.test_std_basicc                 C   s   |   t¡ d S r   )r”   r/   r€   r   r   r   Útest_min_basic
  s    z"TestArrayReductions.test_min_basicc                 C   s   |   t¡ d S r   )r”   r2   r€   r   r   r   Útest_max_basic  s    z"TestArrayReductions.test_max_basicc                 C   s   |   t¡ d S r   )r”   r6   r€   r   r   r   Útest_argmin_basic  s    z%TestArrayReductions.test_argmin_basicc                 C   s   |   t¡ d S r   )r”   r;   r€   r   r   r   Útest_argmax_basic  s    z%TestArrayReductions.test_argmax_basicc                 C   s   |   t¡ d S r   )r”   r@   r€   r   r   r   Útest_nanmin_basic  s    z%TestArrayReductions.test_nanmin_basicc                 C   s   |   t¡ d S r   )r”   rA   r€   r   r   r   Útest_nanmax_basic  s    z%TestArrayReductions.test_nanmax_basicc                 C   s   |   t¡ d S r   )r”   rB   r€   r   r   r   Útest_nanmean_basic  s    z&TestArrayReductions.test_nanmean_basicc                 C   s   |   t¡ d S r   )r”   rC   r€   r   r   r   Útest_nansum_basic  s    z%TestArrayReductions.test_nansum_basicc                 C   s   |   t¡ d S r   )r”   rD   r€   r   r   r   Útest_nanprod_basic"  s    z&TestArrayReductions.test_nanprod_basicc                 C   s   |   t¡ d S r   )r”   rE   r€   r   r   r   Útest_nanstd_basic%  s    z%TestArrayReductions.test_nanstd_basicc                 C   s   | j tdd� d S rŸ   )r”   rF   r€   r   r   r   Útest_nanvar_basic(  s    z%TestArrayReductions.test_nanvar_basicc                    sz   t dd�ˆƒ‰ ‡ ‡‡fdd„‰‡fdd„}|t d¡d ƒD ]}||ƒ q<‡fd	d
„}|t d¡d ƒD ]}||ƒ qhd S )NTr„   c                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   r…   )r   ÚexpectedÚgotr•   r   r   r‹   -  s    z5TestArrayReductions.check_median_basic.<locals>.checkc                    s(   ˆ | ƒ |   d¡} ˆ | ƒ ˆ | jƒ d S )N)é	   é   ©rd   ÚTrM   ©r‹   r   r   Ú	check_odd3  s    
z9TestArrayReductions.check_median_basic.<locals>.check_oddé?   g      %@c                    s(   ˆ | ƒ |   d¡} ˆ | ƒ ˆ | jƒ d S )N)é   é   r³   rM   rµ   r   r   Ú
check_even<  s    
z:TestArrayReductions.check_median_basic.<locals>.check_evené@   )r   r   r\   )r�   rŠ   Zarray_variationsr¶   rN   rº   r   )rˆ   r‹   rŠ   r�   r   Úcheck_median_basic+  s    
z&TestArrayReductions.check_median_basicc                 c   sv   | V  | d d d…   ¡ } | V  tj | ¡ | V  d| | d dk< | V  tj| | d dk< | V  tj| d d …< | V  d S )Nr`   ç      @r¸   rT   rS   )Úcopyr   r~   Úshuffler‘   rM   r   r   r   Ú_array_variationsD  s    z%TestArrayReductions._array_variationsc                 C   s   t }dd„ }|  ||¡ d S )Nc                 s   sJ   | V  | d d d…   ¡ } | V  tj | ¡ | V  d| | d dk< | V  d S )Nr`   r½   r¸   rT   )r¾   r   r~   r¿   rM   r   r   r   Ú
variationsV  s    z9TestArrayReductions.test_median_basic.<locals>.variations)r?   r¼   )r�   rŠ   rÁ   r   r   r   Útest_median_basicS  s    
z%TestArrayReductions.test_median_basicc              	      s®  t dd�ˆƒ‰ d ‡ ‡‡fdd„	}ˆj d¡ ddd¡}t d|d	¡d d d
… }|||ƒ ||dƒ |||d ƒ |||ƒ tjtj tjg}ˆj |d¡|j	d d…< ˆj 
|¡ ˆj 
|¡ |||ƒ | ¡  ¡ }| ¡  ¡ }|||ƒ |t|ƒt|ƒƒ ˆj ddddgd¡}t d|d¡}|||ƒ t d¡d }tj ˆ |dƒd¡ tj ˆ ||ƒd¡ tj ˆ ||d ƒd¡ t d¡ dd¡}t d¡| }tj ˆ ||ƒdddg¡ t d¡ dddd¡}t d¡| }tj ˆ ||ƒjd¡ t d¡| }tj ˆ ||ƒjd¡ t d¡ dd¡}tj ˆ ||d ƒd¡ ˆ t ˆ ||d ƒ¡¡ tj ˆ dddgdƒd¡ t ddddg¡}ˆ ||d gƒ tj |t ddddg¡¡ d S )!NTr„   çê-�™—q=c                    sV   ˆ| |ƒ}ˆ | |ƒ}t  |¡}t  |¡r:ˆj|||d� nˆj|| || |d� d S ©N)Úabs_tol©r   Úisfiniter   r†   ©rN   rI   rÅ   r¯   r°   Zfiniter•   r   r   r‹   e  s    



ÿz@TestArrayReductions.check_percentile_and_quantile.<locals>.checké   ra   r   é   r`   rS   r]   rT   r¸   r^   é   ç      à?rŽ   r½   g      ü?r_   )ç      Ð?rÌ   rŒ   g      @g      @g      &@ih  é   )rÍ   rÌ   ©rS   )rÍ   rÌ   g      è?)ra   )rÃ   )r   r~   Zrandnrd   r   Úlinspacer‘   r�   ÚchoiceZflatr¿   ÚflattenÚtolistÚtupler\   ÚtestingZassert_equalÚarrayÚshapeÚ
assertTrueZisscalar)r�   rŠ   Úq_upper_boundr‹   rN   rI   Z
not_finiteÚxr   r•   r   Úcheck_percentile_and_quantileb  sN    





z1TestArrayReductions.check_percentile_and_quantileéd   c           
         sÆ   t dd�ˆƒ‰ d‡ ‡‡fdd„	}d‡ ‡‡fdd„	}dd	„ }d
d| d| |f}ddtjtjtj f}||ƒD ]}|||ƒ ql|dkrŠ|}	n|}	t d¡}t d¡}|	||ƒ d}|d }|	||ƒ d S )NTr„   ç›+¡†›„=c                    sV   ˆ| |ƒ}ˆ | |ƒ}t  |¡}t  |¡r:ˆj|||d� nˆj|| || |d� d S rÄ   rÆ   rÈ   r•   r   r   r‹   ¦  s    



ÿz>TestArrayReductions.check_percentile_edge_cases.<locals>.checkc                    s0   ˆ| |ƒ  tj¡}ˆ | |ƒ}ˆj|||d� d S rÄ   )Úastyper   r“   r†   )rN   rI   rÅ   r¯   r°   r•   r   r   Úconvert_to_float_and_check²  s    
zSTestArrayReductions.check_percentile_edge_cases.<locals>.convert_to_float_and_checkc                 s   s0   t ddƒD ] }t| |ƒD ]}t |¡V  qq
d S )NrT   r]   )Úranger   r   rÖ   )ÚelementsÚiÚcombr   r   r   Ú_array_combinations·  s    zLTestArrayReductions.check_percentile_edge_cases.<locals>._array_combinationsr   çš™™™™™¹?gš™™™™™É?rT   r`   r^   rS   )rÝ   )rÝ   )r   r   r‘   r�   rÖ   )
r�   rŠ   rÙ   r‹   rß   rä   rI   Zelement_poolrN   Ú_checkr   r•   r   Úcheck_percentile_edge_cases£  s"    


z/TestArrayReductions.check_percentile_edge_casesc              	      sš   t dd�|ƒ‰ ‡ ‡fdd„}ˆ ¡  t d¡}||dƒ ||dƒ ||dd	tjfƒ ˆ ¡ �"}t d¡d
 }d}ˆ ||ƒ W 5 Q R X ˆ dt|jƒ¡ d S )NTr„   c              	      s6   ˆ  t¡�}ˆ | |ƒ W 5 Q R X ˆ dt|jƒ¡ d S )Nz)Percentiles must be in the range [0, 100]©ÚassertRaisesÚ
ValueErrorÚassertEqualÚstrÚ	exception©rN   rI   Zraises©rˆ   r�   r   r   Ú	check_errÔ  s    þzBTestArrayReductions.check_percentile_exceptions.<locals>.check_errr^   éûÿÿÿ)rT   r]   éi   rT   r]   rl   rå   úNot supported for complex dtype©	r   Údisable_leak_checkr   r\   r‘   ÚassertTypingErrorÚassertInrì   rí   ©r�   rŠ   rð   rN   ÚerI   r   rï   r   Úcheck_percentile_exceptionsÑ  s    	



z/TestArrayReductions.check_percentile_exceptionsc              	      sš   t dd�|ƒ‰ ‡ ‡fdd„}ˆ ¡  t d¡}||dƒ ||dƒ ||ddtjfƒ ˆ ¡ �"}t d¡d	 }d}ˆ ||ƒ W 5 Q R X ˆ d
t|jƒ¡ d S )NTr„   c              	      s6   ˆ  t¡�}ˆ | |ƒ W 5 Q R X ˆ dt|jƒ¡ d S )Nz%Quantiles must be in the range [0, 1]rè   rî   rï   r   r   rð   î  s    þz@TestArrayReductions.check_quantile_exceptions.<locals>.check_errr^   g      à¿)rå   rå   gÍÌÌÌÌÌð?rå   rl   ró   rô   rø   r   rï   r   Úcheck_quantile_exceptionsë  s    	



z-TestArrayReductions.check_quantile_exceptionsc                 C   s.   t }| j|dd� | j|dd� |  |¡ d S ©NrÜ   ©rÙ   )rJ   rÛ   rç   rú   ©r�   rŠ   r   r   r   Útest_percentile_basic  s    z)TestArrayReductions.test_percentile_basicc                 C   s.   t }| j|dd� | j|dd� |  |¡ d S rü   )rK   rÛ   rç   rú   rþ   r   r   r   Útest_nanpercentile_basic  s    z,TestArrayReductions.test_nanpercentile_basicc                 C   s.   t }| j|dd� | j|dd� |  |¡ d S ©NrT   rý   )rQ   rÛ   rç   rû   rþ   r   r   r   Útest_quantile_basic  s    z'TestArrayReductions.test_quantile_basicc                 C   s.   t }| j|dd� | j|dd� |  |¡ d S r  )rR   rÛ   rç   rû   rþ   r   r   r   Útest_nanquantile_basic  s    z*TestArrayReductions.test_nanquantile_basicc                 C   s   t }|  || j¡ d S r   )rG   r¼   rÀ   rþ   r   r   r   Útest_nanmedian_basic  s    z(TestArrayReductions.test_nanmedian_basicc                 C   s`   t jdt jd�}t|ƒ}|  |jd¡ |  |jd¡ tt|gƒ}|j	}|  t  
|¡||ƒ¡ d S ©Nr]   rZ   rT   ÚC)r   r\   Úint32r   rë   ÚndimÚlayoutr   r!   ru   r   ©r�   r   rw   rx   rˆ   r   r   r   Útest_array_sum_global!  s    z)TestArrayReductions.test_array_sum_globalc                 C   sb   t jdt jd�d }t|ƒ}|  |jd¡ |  |jd¡ tt|gƒ}|j	}|  | 
¡ ||ƒ¡ d S r  )r   r\   r  r   rë   r  r	  r   r#   ru   r"   r
  r   r   r   Útest_array_prod_int_1d,  s    z*TestArrayReductions.test_array_prod_int_1dc                 C   sd   t jdt jd�d }t|ƒ}|  |jd¡ |  |jd¡ tt|gƒ}|j	}t j
 | ¡ ||ƒ¡ d S )Nr]   rZ   rå   rT   r  )r   r\   rn   r   rë   r  r	  r   r#   ru   rÕ   Úassert_allcloser"   r
  r   r   r   Útest_array_prod_float_1d7  s    z,TestArrayReductions.test_array_prod_float_1dc                 C   sb   t jdt jd�}t|ƒ}|  |jd¡ |  |jd¡ tt|gƒ}|j	}t j
 t  |¡||ƒ¡ d S r  )r   r\   r  r   rë   r  r	  r   r$   ru   rÕ   r  r"   r
  r   r   r   Útest_array_prod_globalB  s    z*TestArrayReductions.test_array_prod_globalc                 C   s|   t jddt jd�}t||ƒ\}}|  ||¡ t  ddd¡}t||ƒ\}}|  ||¡ | d¡}t||ƒ\}}|  ||¡ d S )NrS   r]   rZ   rË   rÎ   )ra   rS   )r   r\   Úint16ry   r†   rÐ   rd   )r�   rŠ   r   r¯   r°   r   r   r   Úcheck_cumulativeM  s    
z$TestArrayReductions.check_cumulativec                 C   s   |   t¡ d S r   )r  r   r€   r   r   r   Útest_array_cumsumX  s    z%TestArrayReductions.test_array_cumsumc                 C   s   |   t¡ d S r   )r  r   r€   r   r   r   Útest_array_cumsum_global[  s    z,TestArrayReductions.test_array_cumsum_globalc                 C   s   |   t¡ d S r   )r  r   r€   r   r   r   Útest_array_cumprod^  s    z&TestArrayReductions.test_array_cumprodc                 C   s   |   t¡ d S r   )r  r   r€   r   r   r   Útest_array_cumprod_globala  s    z-TestArrayReductions.test_array_cumprod_globalFc                 C   s�   |rdnd}t  |¡d  d¡}t||ƒ\}}|  ||¡ t  d¡d  d¡}t||ƒ\}}|  ||¡ | d¡}t||ƒ\}}|  ||¡ dS )	zH
        Check that integer overflows are avoided (issue #931).
        rS   r]   i@œ  r  l            Zint64Zuint64N)r   r\   rÞ   ry   r†   )r�   rŠ   Úis_prodZn_itemsr   ÚnprÚnbrr   r   r   Úcheck_aggregation_magnituded  s    
z/TestArrayReductions.check_aggregation_magnitudec                 C   s   |   t¡ |   t¡ d S r   )r  r    r!   r€   r   r   r   Útest_sum_magnitudew  s    
z&TestArrayReductions.test_sum_magnitudec                 C   s   |   t¡ |   t¡ d S r   )r  r   r   r€   r   r   r   Útest_cumsum_magnitude{  s    
z)TestArrayReductions.test_cumsum_magnitudec                 C   s   | j tdd� d S ©NT)r  )r  r   r€   r   r   r   Útest_nancumsum_magnitude  s    z,TestArrayReductions.test_nancumsum_magnitudec                 C   s    | j tdd� | j tdd� d S r  )r  r#   r$   r€   r   r   r   Útest_prod_magnitude‚  s    z'TestArrayReductions.test_prod_magnitudec                 C   s    | j tdd� | j tdd� d S r  )r  r   r   r€   r   r   r   Útest_cumprod_magnitude†  s    z*TestArrayReductions.test_cumprod_magnitudec                 C   s   | j tdd� d S r  )r  r   r€   r   r   r   Útest_nancumprod_magnitudeŠ  s    z-TestArrayReductions.test_nancumprod_magnitudec                 C   s   |   t¡ |   t¡ d S r   )r  r&   r'   r€   r   r   r   Útest_mean_magnitude�  s    
z'TestArrayReductions.test_mean_magnitudec                 C   s   |   t¡ |   t¡ d S r   )r  r)   r*   r€   r   r   r   Útest_var_magnitude‘  s    
z&TestArrayReductions.test_var_magnitudec                 C   s   |   t¡ |   t¡ d S r   )r  r,   r-   r€   r   r   r   Útest_std_magnitude•  s    
z&TestArrayReductions.test_std_magnitudec                 C   s.  t |ƒ}tdd�|ƒ}|  ||ƒ||ƒ¡ |  ||d d… ƒ||d d… ƒ¡ |d d d…  ¡ }|  ||ƒ||ƒ¡ tj |¡ |  ||ƒ||ƒ¡ tdkrÈd|jkrÈd||j	d < |  ||ƒ||ƒ¡ d|jk�rt
dt|ƒdƒD ]}d||< qä|  ||ƒ||ƒ¡ | | d¡¡ |  ||ƒ||ƒ¡ d S )	NTr„   r`   )rT   é   r>   ZNaTrS   rT   )r   r   r†   r¾   r   r~   r¿   r   Ú__name__Úsizerà   ÚlenÚfillr[   )r�   rŠ   r   rw   rˆ   rÚ   r   r   r   Ú_do_check_nptimedelta™  s"    $
z)TestArrayReductions._do_check_nptimedeltac                 C   s"   t  d¡jdd�}|  ||¡ d S )Nr]   zM8[Y]rZ   ©r   r\   rÞ   r)  ©r�   rŠ   r   r   r   r   Úcheck_npdatetime¸  s    z$TestArrayReductions.check_npdatetimec                 C   s"   t  d¡jdd�}|  ||¡ d S )Nr]   zm8[s]rZ   r*  r+  r   r   r   Úcheck_nptimedelta¼  s    z%TestArrayReductions.check_nptimedeltac                 C   s   |   t¡ |  t¡ d S r   )r,  r/   r-  r€   r   r   r   Útest_min_npdatetimeÀ  s    
z'TestArrayReductions.test_min_npdatetimec                 C   s   |   t¡ |  t¡ d S r   )r,  r2   r-  r€   r   r   r   Útest_max_npdatetimeÄ  s    
z'TestArrayReductions.test_max_npdatetimec                 C   s   |   t¡ |  t¡ d S r   )r,  r6   r-  r€   r   r   r   Útest_argmin_npdatetimeÈ  s    
z*TestArrayReductions.test_argmin_npdatetimec                 C   s   |   t¡ |  t¡ d S r   )r,  r;   r-  r€   r   r   r   Útest_argmax_npdatetimeÌ  s    
z*TestArrayReductions.test_argmax_npdatetimec                 C   s   |   t¡ d S r   )r-  r?   r€   r   r   r   Útest_median_npdatetimeÐ  s    z*TestArrayReductions.test_median_npdatetimec                 C   s   |   t¡ d S r   )r-  r    r€   r   r   r   Útest_sum_npdatetimeÓ  s    z'TestArrayReductions.test_sum_npdatetimec                 C   s   |   t¡ d S r   )r-  r   r€   r   r   r   Útest_cumsum_npdatetimeÖ  s    z*TestArrayReductions.test_cumsum_npdatetimec                 C   s   |   t¡ d S r   )r-  r&   r€   r   r   r   Útest_mean_npdatetimeÙ  s    z(TestArrayReductions.test_mean_npdatetimec                    sÄ   t dd�ˆƒ‰ ‡ ‡‡fdd„}dd„ }dd„ }|ƒ D ] }||ƒ ||| tj¡ƒƒ q4|t g ¡ƒ |t d	tj¡ƒ t tjd
tjddddddg	¡}|d|d d d…   }| dd¡}||ƒ d S )NTr„   c                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   r…   ©rN   r¯   r°   r•   r   r   r‹   ß  s    z7TestArrayReductions.check_nan_cumulative.<locals>.checkc                 S   s2   | j d }t | tjjt| j ƒ|dd�tj¡ | S )NrS   F)Úreplace)r&  r   Úputr~   rÑ   rà   r‘   )rN   Úpr   r   r   Ú_set_some_values_to_nanä  s    
$zITestArrayReductions.check_nan_cumulative.<locals>._set_some_values_to_nanc                   s   sŠ   t  ddd¡ ddd¡V  t  t jddg¡V  t  ddddg¡V  t  dd	¡V  t  t  dd
¡d ¡V  t jdd	t jd�d d d… V  d S )Nr`   ra   é<   r¸   r^   TFrT   r]   r»   gfffff¦@@rZ   )r   rÐ   rd   rÖ   r�   r\   Úasfortranarrayrn   r   r   r   r   Úa_variationsé  s    z>TestArrayReductions.check_nan_cumulative.<locals>.a_variationsr]   rS   r¸   r^   rÎ   r²   rË   r±   rl   r`   ra   )r   rÞ   r   r“   rÖ   Úfullr‘   rd   )r�   rŠ   r‹   r:  r=  rN   Úpartsr   r•   r   Úcheck_nan_cumulativeÜ  s    
 z(TestArrayReductions.check_nan_cumulativec                 C   s   |   t¡ |  t¡ d S r   )r  r   r@  r€   r   r   r   Útest_nancumprod_basicÿ  s    
z)TestArrayReductions.test_nancumprod_basicc                 C   s   |   t¡ |  t¡ d S r   )r  r   r@  r€   r   r   r   Útest_nancumsum_basic  s    
z(TestArrayReductions.test_nancumsum_basicc                    sB   t ‰tdd�ˆƒ‰ ‡ ‡‡fdd„}dd„ }|ƒ D ]}||ƒ q0d S )NTr„   c                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   r…   r6  r•   r   r   r‹     s    z1TestArrayReductions.test_ptp_basic.<locals>.checkc                  s   s$  t  d¡V  t  dt jdg¡V  t  t j dg¡V  dV  dV  t  dd¡V  dddgV  t  d	dd
¡ ddd¡} | V  t  | ¡V  | d d d… V  t j	 
d¡ | ¡ | V  dV  dV  t j V  dV  dt jgV  dt jgV  dV  t  dt j¡V  dt jd  V  t jt jd  V  t jV  d S )Nr]   gš™™™™™ñ¿gš™™™™™@r^   )r¸   rS   r^   ©rT   gffffffÀrå   éöÿÿÿr¹   r¸   rS   r`   r   rÎ   g      @y      ð?      @))gffffff@r�   gffffffÀ)g333333@gš™™™™™@gÍÌÌÌÌÌ@rT   rl   )r   r\   rÖ   r‘   r�   r>  rÐ   rd   r<  r~   ZRandomStater¿   rM   r   r   r   r=    s0    
z8TestArrayReductions.test_ptp_basic.<locals>.a_variations)rO   r   )r�   r‹   r=  rN   r   r•   r   Útest_ptp_basic  s    
z"TestArrayReductions.test_ptp_basicc                 C   s<   t }tdd�|ƒ}t d¡}||ƒ}||ƒ}|  ||¡ d S )NTr„   r]   )rP   r   r   r\   r†   )r�   rŠ   rˆ   rN   r¯   r°   r   r   r   Útest_ptp_method-  s    
z#TestArrayReductions.test_ptp_methodc                    s°   t ‰tdd�ˆƒ‰ ‡ ‡‡fdd„}ddd„}tddgdd	�D ]\}}|||ƒ}||ƒ q<t d
¡}t dd¡}|d|  }||ƒ |d|  }||ƒ tjddd�}||ƒ d S )NTr„   c                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   r…   r6  r•   r   r   r‹   <  s    z3TestArrayReductions.test_ptp_complex.<locals>.checkFc                 S   sT   t  ddd¡}| r t j|dd…< t  ddd¡}|r@t j|dd…< |d	|   dd¡S )
Néüÿÿÿr¸   é   r±   rñ   r^   r²   r_   rl   )r   rÐ   r‘   rd   )Úreal_nanÚimag_nanÚrealÚimagr   r   r   Ú
make_arrayA  s    z8TestArrayReductions.test_ptp_complex.<locals>.make_arrayrS   )ÚrepeatrË   rG  r¸   rl   )r¸   r¸   y      ð?      ð¿)Z
fill_value)FF)rO   r   r   r   Zonesr\   r>  )r�   r‹   rM  rI  rJ  ÚcomprK  rL  r   r•   r   Útest_ptp_complex8  s    
	


z$TestArrayReductions.test_ptp_complexc              	   C   s�   t }tdd�|ƒ}|  ¡  |  ¡ �}|t d¡ƒ W 5 Q R X d}|  |t|jƒ¡ |  	t
¡�}|t g ¡ƒ W 5 Q R X d}|  |t|jƒ¡ d S )NTr„   )TTFz+Boolean dtype is unsupported (as per NumPy)z&zero-size array reduction not possible)rO   r   rõ   rö   r   rÖ   r÷   rì   rí   ré   rê   )r�   rŠ   rˆ   rù   Úmsgr   r   r   Útest_ptp_exceptionsX  s    
z'TestArrayReductions.test_ptp_exceptionsc                    sÒ   t tf}|D ]À‰tdd�ˆƒ‰ ‡ ‡‡fdd„}t ddd¡}|d |d d	…< |d
 }||d  }||ƒ tdƒD ]Z}ˆj |¡ ˆj |¡ ˆj tj	tj
g¡}||d  }|d |d d	…< || |¡ƒ qpqd S )NTr„   c                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   r…   r6  r•   r   r   r‹   q  s    z=TestArrayReductions.test_min_max_complex_basic.<locals>.checkrD  r]   é(   r`   r¸   rS   rl   )r0   r3   r   r   rÐ   rà   r~   r¿   rÑ   ro   Z
complex128rÞ   )r�   Úpyfuncsr‹   rK  rL  rN   Ú_r[   r   r•   r   Útest_min_max_complex_basick  s     z.TestArrayReductions.test_min_max_complex_basicc                    sÔ   t tf}|D ]Â‰tdd�ˆƒ‰ ‡ ‡‡fdd„}t ddd¡}|d |d d	…< tj|d
d…< |d }tj|dd…< ||d  }||ƒ tdƒD ]@}ˆj |¡ ˆj |¡ ||d  }|d |d d	…< ||ƒ qŒqd S )NTr„   c                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   r…   r6  r•   r   r   r‹   Š  s    zCTestArrayReductions.test_nanmin_nanmax_complex_basic.<locals>.checkrD  r]   rS  r`   r¸   r^   r±   rS   r²   r_   rl   )	r@   rA   r   r   rÐ   r‘   rà   r~   r¿   )r�   rT  r‹   rK  rL  rN   rU  r   r•   r   Ú test_nanmin_nanmax_complex_basic„  s"    z4TestArrayReductions.test_nanmin_nanmax_complex_basicc                    sP   t tf}‡ ‡‡fdd„}dd„ }|D ]&‰tdd�ˆƒ‰ |ƒ D ]}||ƒ q<q$d S )Nc                    s    ˆ| ƒ}ˆ | ƒ}ˆ  ||¡ d S r   r…   r6  r•   r   r   r‹   ¡  s    zFTestArrayReductions.test_nanmin_nanmax_non_array_inputs.<locals>.checkc                   s   sj   ddddgV  dV  t  d¡V  dV  dV  d	V  t jdd
dfV  t jt jt j gV  t jdfdgV  d S )NrT   rÎ   r¸   rS   ))rD  r¸   iôÿÿÿ)r^   éÈ   iâÿÿÿra   rÏ   g‰A`åÐ"	@FgÍÌÌÌÌÌÀr’   gš™™™™™ñ?)gš™™™™™Àgffffff!@)r   rÖ   r‘   r�   r   r   r   r   r=  ¦  s    zMTestArrayReductions.test_nanmin_nanmax_non_array_inputs.<locals>.a_variationsTr„   )r@   rA   r   )r�   rT  r‹   r=  rN   r   r•   r   Ú#test_nanmin_nanmax_non_array_inputsž  s    
z7TestArrayReductions.test_nanmin_nanmax_non_array_inputsc           	      C   sà   t  ddddg¡}t  d¡ dd¡}|d  d7  < t  d	¡ dddd
¡d }|d  d7  < |d  d8  < |||fD ]b}tt|jƒƒdd„ t|jƒD ƒ }dd„ |D ƒ}dd„ |D ƒ}|D ]}|  | |¡||ƒ¡ q¾qxd S )Nr   é   ra   r¸   rÎ   rS   ©r   rT   rÜ   éx   r^   r]   ©r   rT   rT   rS   ©rT   r   r   r   é3   c                 S   s   g | ]}|d   ‘qS rC  r   ©rj   râ   r   r   r   rk   Á  s    zATestArrayReductions.test_argmax_axis_1d_2d_4d.<locals>.<listcomp>c                 S   s   g | ]}|fd d„‘qS )c                 S   s   t j| |d�S ©N©Úaxisr<   ©rN   Z_axisr   r   r   Ú<lambda>Å  ó    zJTestArrayReductions.test_argmax_axis_1d_2d_4d.<locals>.<listcomp>.<lambda>r   ©rj   rc  r   r   r   rk   Ä  s   ÿc                 S   s   g | ]}t d d�|ƒ‘qS ©Tr„   ©r   ©rj   rŠ   r   r   r   rk   È  s    ©	r   rÖ   r\   rd   Úlistrà   r  r†   Úpy_func©	r�   Úarr1dÚarr2dZarr4dr   ZaxesZpy_functionsZc_functionsrˆ   r   r   r   Útest_argmax_axis_1d_2d_4d·  s$    ÿþÿz-TestArrayReductions.test_argmax_axis_1d_2d_4dc                    sp   t  d¡}t  d¡ dd¡}tdd�dd„ ƒ‰ ‡ ‡fdd	„}||d
ƒ ||dƒ ||dƒ ||dƒ ˆ ¡  d S )NrÎ   rS   ra   Tr„   c                 S   s   t  | |¡S r   r<   ©r   rc  r   r   r   Ú	jitargmaxÒ  s    zDTestArrayReductions.test_argmax_axis_out_of_range.<locals>.jitargmaxc              	      sJ   ˆ  td¡� ˆ  | |¡ W 5 Q R X ˆ  td¡� ˆ | |ƒ W 5 Q R X d S ©Nzaxis.*out of bounds©ÚassertRaisesRegexrê   rm  rr  ©rs  r�   r   r   Úassert_raisesÖ  s    zHTestArrayReductions.test_argmax_axis_out_of_range.<locals>.assert_raisesrT   éþÿÿÿéýÿÿÿ©r   r\   rd   r   rõ   ©r�   ro  rp  rx  r   rw  r   Útest_argmax_axis_out_of_rangeÎ  s    





z1TestArrayReductions.test_argmax_axis_out_of_rangec              	   C   sP   t  d¡}tdd�dd„ ƒ}|  ¡ �}||dƒ W 5 Q R X |  dt|jƒ¡ d S )NrÎ   Tr„   c                 S   s   t  | |¡S r   r<   rr  r   r   r   rs  æ  s    zGTestArrayReductions.test_argmax_axis_must_be_integer.<locals>.jitargmaxÚfooúaxis must be an integer©r   r\   r   rö   r÷   rì   rí   )r�   r   rs  rù   r   r   r   Ú test_argmax_axis_must_be_integerã  s    


z4TestArrayReductions.test_argmax_axis_must_be_integerc                    s@   t  d¡ dd¡‰ ‡ fdd„}|  |ˆ ƒtdd�|ƒˆ ƒ¡ d S )NrÎ   rS   ra   c                    s   ˆ j dd�S ©Nr   rb  r9   r   ©rp  r   r   r:   ñ  s    z;TestArrayReductions.test_argmax_method_axis.<locals>.argmaxTr„   ©r   r\   rd   r†   r   ©r�   r:   r   rƒ  r   Útest_argmax_method_axisî  s
    
ÿz+TestArrayReductions.test_argmax_method_axisc                    sF   t jdt jd� dd¡‰ ‡ fdd„}|  |ˆ ƒtdd�|ƒˆ ƒ¡ d S )	NrÎ   rZ   rS   ra   c                    s   ˆ j dd�S r‚  r9   r   rƒ  r   r   r:   û  s    z;TestArrayReductions.test_argmax_return_type.<locals>.argmaxTr„   ©r   r\   Zuint8rd   r†   r   r…  r   rƒ  r   Útest_argmax_return_type÷  s
    
ÿz+TestArrayReductions.test_argmax_return_typec           	      C   sà   t  ddddg¡}t  d¡ dd¡}|d  d7  < t  d	¡ dddd
¡d }|d  d7  < |d  d8  < |||fD ]b}tt|jƒƒdd„ t|jƒD ƒ }dd„ |D ƒ}dd„ |D ƒ}|D ]}|  | |¡||ƒ¡ q¾qxd S )Nr   rZ  ra   r¸   rÎ   rS   r[  rÜ   r\  r^   r]   r]  r^  r_  c                 S   s   g | ]}|d   ‘qS rC  r   r`  r   r   r   rk     s    zATestArrayReductions.test_argmin_axis_1d_2d_4d.<locals>.<listcomp>c                 S   s   g | ]}|fd d„‘qS )c                 S   s   t j| |d�S ra  r7   rd  r   r   r   re    rf  zJTestArrayReductions.test_argmin_axis_1d_2d_4d.<locals>.<listcomp>.<lambda>r   rg  r   r   r   rk     s   ÿc                 S   s   g | ]}t d d�|ƒ‘qS rh  ri  rj  r   r   r   rk     s    rk  rn  r   r   r   Útest_argmin_axis_1d_2d_4d  s$    ÿþÿz-TestArrayReductions.test_argmin_axis_1d_2d_4dc                    sp   t  d¡}t  d¡ dd¡}tdd�dd„ ƒ‰ ‡ ‡fdd	„}||d
ƒ ||dƒ ||dƒ ||dƒ ˆ ¡  d S )NrÎ   rS   ra   Tr„   c                 S   s   t  | |¡S r   r7   rr  r   r   r   Ú	jitargmin  s    zDTestArrayReductions.test_argmin_axis_out_of_range.<locals>.jitargminc              	      sJ   ˆ  td¡� ˆ  | |¡ W 5 Q R X ˆ  td¡� ˆ | |ƒ W 5 Q R X d S rt  ru  rr  ©rŠ  r�   r   r   rx     s    zHTestArrayReductions.test_argmin_axis_out_of_range.<locals>.assert_raisesrT   ry  rz  r{  r|  r   r‹  r   Útest_argmin_axis_out_of_range  s    





z1TestArrayReductions.test_argmin_axis_out_of_rangec              	   C   sP   t  d¡}tdd�dd„ ƒ}|  ¡ �}||dƒ W 5 Q R X |  dt|jƒ¡ d S )NrÎ   Tr„   c                 S   s   t  | |¡S r   r7   rr  r   r   r   rŠ  1  s    zGTestArrayReductions.test_argmin_axis_must_be_integer.<locals>.jitargminr~  r  r€  )r�   r   rŠ  rù   r   r   r   Ú test_argmin_axis_must_be_integer.  s    


z4TestArrayReductions.test_argmin_axis_must_be_integerc                    s@   t  d¡ dd¡‰ ‡ fdd„}|  |ˆ ƒtdd�|ƒˆ ƒ¡ d S )NrÎ   rS   ra   c                    s   ˆ j dd�S r‚  r4   r   rƒ  r   r   r5   <  s    z;TestArrayReductions.test_argmin_method_axis.<locals>.argminTr„   r„  ©r�   r5   r   rƒ  r   Útest_argmin_method_axis9  s
    
ÿz+TestArrayReductions.test_argmin_method_axisc                    sF   t jdt jd� dd¡‰ ‡ fdd„}|  |ˆ ƒtdd�|ƒˆ ƒ¡ d S )	NrÎ   rZ   rS   ra   c                    s   ˆ j dd�S r‚  r4   r   rƒ  r   r   r5   F  s    z;TestArrayReductions.test_argmin_return_type.<locals>.argminTr„   r‡  rŽ  r   rƒ  r   Útest_argmin_return_typeB  s
    
ÿz+TestArrayReductions.test_argmin_return_typec                    s’   t ttttttttt	t
ttttttttttg}ttttg}|tttg7 }|tg7 }tjtjtj tj!g}‡ fdd„}||d d… |ƒ |||ƒ d S )Nc                    sd   | D ]Z}t |ƒ}t||ƒD ]B\‰ }d}| ˆ j|jj|j¡}ˆ ||f‡ fdd„	}tˆ||ƒ qqd S )Nztest_{0}_{1}_{2}dc                    sB   d}dˆ j krt |¡rd}t||ƒ\}}| j|||d|d� d S )NrT   r"   ra   Zsingle)rQ  r¡   Úulps)r%  r   Ziscomplexobjry   r†   )r�   ZredFuncZ	testArrayZtestNamer‘  r  r  ©Zred_funcr   r   Únew_test_functions  s    
ÿ
 ÿz]TestArrayReductions.install_generated_tests.<locals>.install_tests.<locals>.new_test_function)rt   r   Úformatr%  r[   Únamer  Úsetattr)ZdtypesÚfuncsÚdtZtest_arraysrv   Ú	test_namer“  ©Úclsr’  r   Úinstall_testsh  s    þþzBTestArrayReductions.install_generated_tests.<locals>.install_testsr`   )"r    r!   r#   r$   r&   r'   r)   r*   r,   r-   r   r   r   r   r/   r0   r2   r3   rA   r@   rC   r6   r8   r;   r=   rB   rE   rF   rD   r   r  rn   rV   ro   )r›  Zreduction_funcsZreduction_funcs_rspaceZdtypes_to_testrœ  r   rš  r   Úinstall_generated_testsL  s>             ö ÿ
z+TestArrayReductions.install_generated_tests)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­   r®   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/  r0  r1  r2  r3  r4  r5  r@  rA  rB  rE  rF  rP  rR  rV  rW  rY  rq  r}  r�  r†  rˆ  r‰  rŒ  r�  r�  r�  Úclassmethodr�  Ú__classcell__r   r   r‚   r   rz   »   sª   
A
.
#& 	
	
rz   c                   @   s*   e Zd Ze d¡Zdd„ Zedd„ ƒZdS )ÚTestArrayReductionsExceptionsr   c              	   C   sd   t dd�|ƒ}|  t¡� || jƒ W 5 Q R X |  t¡�}|| jƒ W 5 Q R X |  |t|jƒ¡ d S )NTr„   )r   ré   ÚBaseExceptionÚ	zero_sizerê   r÷   rì   rí   )r�   rŠ   rQ  rˆ   rù   r   r   r   Úcheck_exception’  s    z-TestArrayReductionsExceptions.check_exceptionc                 C   s¢   t ƒ }d}d}ttttfD ]}|||< qttttfD ]}|||< q4d}| ¡ D ]N\}}| |j	¡}| |j	¡}	|	 
dd¡ 
dd¡}	||	fdd„}
t| ||
ƒ qNd S )	Nz'attempt to get {0} of an empty sequencez*zero-size array to reduction operation {0}ztest_zero_size_array_{0}Zarray_Ú Z_globalc                 S   s   |   ||¡ d S r   )r§  )r�   ÚfuncÚmessager   r   r   Útest_fn¯  s    z6TestArrayReductionsExceptions.install.<locals>.test_fn)Údictr;   r=   r6   r8   r2   r/   Úitemsr”  r%  r7  r–  )r›  Z	fn_to_msgZ	empty_seqZop_no_identrÚ   Zname_templateÚfnrQ  r™  Zlmsgr«  r   r   r   Úinstallœ  s     ÿ

z%TestArrayReductionsExceptions.installN)	r%  rž  rŸ  r   r\   r¦  r§  r¢  r¯  r   r   r   r   r¤  �  s   

r¤  Ú__main__)EÚ	itertoolsr   r   Únumpyr   Znumbar   r   Znumba.core.compilerr   Znumba.np.numpy_supportr   Znumba.tests.supportr   r	   r
   Zunittestr   r   r   r   r   r   r   r   r   r   r    r!   r#   r$   r&   r'   r)   r*   r,   r-   r/   r0   r2   r3   r6   r8   r;   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   rJ   rK   rO   rP   rQ   rR   ri   rt   ry   rz   r�  r¤  r¯  r%  Úmainr   r   r   r   Ú<module>   s‚   	       V'
