o
    Z۷i                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlmZmZmZ d dlZd dlmZ d dlmZ dd Zd	d
 Zdd Zdd Zdd ZG dd de
ejZG dd deZG dd deZG dd deZG dd de
ejZedkre   dS dS )    N)njit	vectorize)MemoryLeakMixinTestCase)TypingErrorNumbaNotImplementedErrorNumbaExperimentalFeatureWarning)dufunc)
from_dtypec                 C   s   | | S N a0a1r   r   V/home/ubuntu/vllm_env/lib/python3.10/site-packages/numba/tests/npyufunc/test_dufunc.pypyuadd      r   c                 C   s   | | S r   r   r   r   r   r   pysub   r   r   c                 C   s   | | S r   r   r   r   r   r   pymult   r   r   c                 C   s   | | S r   r   r   r   r   r   pydiv   r   r   c                 C   s   | |k r| S |S r   r   r   r   r   r   pymin!   s   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
TestDUFuncc                 C   s   t j|tdddS )NT)nopython)targetoptions)r	   DUFuncdict)selfpyfuncr   r   r   nopython_dufunc'   s   zTestDUFunc.nopython_dufuncc                 C   s   |  t}| |j d|_| |j | t d|_W d    n1 s'w   Y  | t |t	dddt	ddd W d    d S 1 sLw   Y  d S )NTFr      
      )
r   r   assertFalse_frozen
assertTrueassertRaises
ValueError	TypeErrornplinspacer   duaddr   r   r   test_frozen*   s   
 "zTestDUFunc.test_frozenc                 C   s&   |  t}| tdd|dd d S )Nr   r!   )r   r   assertEqualr*   r   r   r   test_scalar4   s   
zTestDUFunc.test_scalarc                    s   |  t t fdd}tddd}|d d }|dd  }td}|||| tj|| | |d}|d}td}|||| tj|| | |d d }	td}
|||	|
 tj||	 |
 d S )	Nc                    s    | || d S r   r   )r   r   o0r+   r   r   npmadd;      z(TestDUFunc.test_npm_call.<locals>.npmaddr   ffffff?   r    r!      r6   )	r   r   r   r(   r)   zerostestingassert_array_equalreshape)r   r1   XX0X1out0Y0Y1out1Y2out2r   r0   r   test_npm_call8   s$   





zTestDUFunc.test_npm_callc                    s   |  t t fdd}tddd}|d d }|dd  }|||}tj|| | |d}|d}|||}tj|| | |d d }	|||	}
tj||	 |
 |d	d
}| |d d S )Nc                    
    | |S r   r   r   r0   r   r   r1   Q      
z8TestDUFunc.test_npm_call_implicit_output.<locals>.npmaddr   r3   r4   r    r5   r6         ?       @g      @)	r   r   r   r(   r)   r8   r9   r:   r-   )r   r1   r;   r<   r=   r>   r?   r@   rA   rB   rC   out3r   r0   r   test_npm_call_implicit_outputN   s"   






z(TestDUFunc.test_npm_call_implicit_outputc                 C   s   |  t}| |jd | |jd | |j|j|j  | |jd | |jg  | |jd  |dd | |jd | |jt	|j | 
|j d S )Nr!   r   r   )r   r   r-   ninnoutnargsntypestypesidentitylenassertIsNone	signaturer*   r   r   r   test_ufunc_propsc   s   

zTestDUFunc.test_ufunc_propsc                    sr   |  t  dd  j j j j jd} fdd}| D ]\}}t||}| 	|| d|  q!d S )Nr   r!   )rK   rL   rM   rP   rS   c                    s.   d|  d}i }t t|d i| |d S )Nz>
                def impl():
                    return duadd.z
            r+   impl)exectextwrapdedent)attrfnlr0   r   r   get_attr_fn|   s   z4TestDUFunc.test_ufunc_props_jit.<locals>.get_attr_fnz!Attribute differs from original: )
r   r   rK   rL   rM   rP   rS   itemsr   r-   )r   
attributesr\   rY   valcfuncr   r0   r   test_ufunc_props_jitp   s   

	
zTestDUFunc.test_ufunc_props_jitN)
__name__
__module____qualname__r   r,   r.   rD   rJ   rT   ra   r   r   r   r   r   %   s    
r   c                   @   s   e Z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jdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zejd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )6TestDUFuncAtc                 G   sB   |  }|  }|j|g|R   ||g|R   | || d S r   )copyatassertPreciseEqual)r   rZ   ufuncaargsexpectedgotr   r   r   _compare_output   s
   zTestDUFuncAt._compare_outputc                    sD    j dkrt  fddn	t  fddtfdd}|S )Nr!   c                    rE   r   r   rj   bri   r   r   <lambda>      
 z,TestDUFuncAt._generate_jit.<locals>.<lambda>c                        | S r   r   rj   rq   r   r   rr          c                     s
    j |  S r   rg   )rk   vecr   r   rZ      rF   z&TestDUFuncAt._generate_jit.<locals>.fnrK   r   r   )r   ri   rZ   r   ri   ry   r   _generate_jit   s   
zTestDUFuncAt._generate_jitc                    sx  t jdtd}| t j}| t j}t dd  t fdd}| |t j|g dd d	}| 	t
| || g d
d  W d    n1 sKw   Y  | |t j| g d
 t g d}| |t j| g d| d}| 	t
| || g d
g d W d    n1 sw   Y  | t
 || g d
ddgdg W d    d S 1 sw   Y  d S )Nr    dtypec                 S   s
   t | S r   )r(   negativeru   r   r   r   rr      rs   z8TestDUFuncAt.test_numpy_ufunc_at_basic.<locals>.<lambda>c                    s     | ||S r   rw   )rj   indicesrp   negative_vecr   r   negative_jit_2      z>TestDUFuncAt.test_numpy_ufunc_at_basic.<locals>.negative_jit_2r!   r6   r!   r   zsecond operand needed for ufunc)r!   r6      d   r   r   z+second operand provided when ufunc is unaryr   r!   r   r!   )r(   arangeintr|   addr   r   r   rn   assertRaisesRegexr   rf   arrayr%   )r   rj   add_atnegative_atr   err_msgrp   r   r   r   test_numpy_ufunc_at_basic   s*   "z&TestDUFuncAt.test_numpy_ufunc_at_basicc           
   
   C   s*  t jd }t jt jt jf}|D ]}}z	tt | W n	 ty#   Y qw |D ]e}t jd|d}t 	t jdt j
dt jddt j
dg}|jd}| |}|||| t |}	|t ju rgd |	d	< |	d< q&|	d	  d|t ju rs|n|  7  < |	d  d|t ju r|n|  7  < q&q| ||	 d S )
NComplexr    r}            y              ?r   )r(   	typecodesr   subtractmultiplyr
   r~   r   onesconcatenateintpfulltyper|   	ones_likerh   )
r   r   ufuncstypecoderi   rj   indxvalueufunc_atrl   r   r   r   test_ufunc_at_inner_loop   s.   



$&z%TestDUFuncAt.test_ufunc_at_inner_loopc              
   C   s@   t jdtd}| t j}| |t j|td t jdtd d S )Nr6   r}   )r(   r7   r   r|   r   rn   slicer   r   arrr   r   r   r   test_ufunc_at_ellipsis   s
   z#TestDUFuncAt.test_ufunc_at_ellipsisc                 C   sJ   t jdt jd}t d}| t j}||| t |g dks#J d S )Nr6   r}   )r   r   r   r   r   )r(   r   int32r   r|   r   all)r   r   r   rg   r   r   r   test_ufunc_at_negative   s
   

z#TestDUFuncAt.test_ufunc_at_negativec                 C   sx   t jdt jd}t jdtd}d|d< d|d< d|dd < t jdtd}| t j}|||| |d | ks:J d S )	Ni   r}   r    r   r6   r   r   i    )r(   r7   int16floatr|   r   sum)r   r   rp   rj   r   r   r   r   test_ufunc_at_large   s   z TestDUFuncAt.test_ufunc_at_largec                 C   sX   t d}t d}| t j}t jt|t jd}|||| |d t|ks*J d S )Nr    i r}   r   )r(   r7   r   r|   r   rQ   uint8)r   r   valuesr   indexr   r   r   test_cast_index_fastpath   s   

z%TestDUFuncAt.test_cast_index_fastpathc              	   C   sz   t dt dt ddf}|D ])}t d}t t dd}| t j}|||| t j	|t 
|d|  qd S )Nr   r   rG   i  r!   )r(   r   float64r7   repeatr   r|   r   r8   r9   	full_like)r   r   r   r   r   r   r   r   r   #test_ufunc_at_scalar_value_fastpath  s   
z0TestDUFuncAt.test_ufunc_at_scalar_value_fastpathc                 C   s  t ddd}t g dg dg dg}| t j}||td t g df| | |t g dg dg d	g t d
ddd}t g d}||td td t g df| | |t g dg dg dgg dg dg dgg dg dg dgg t ddd}t g dg dg dg}||t g dtd f| | |t g dg dg dg t d
ddd}t g d}||td t g dtd f| | |t g dg dg dgg dg dg dgg dg dg dgg t ddd}t g d}||dt g df| | |t g dg d g d!g t d
ddd}t g d}||t g ddtd f| | |t g dg d g d!gg d"g d#g d$gg d%g d&g d'gg t d
ddd}t g d}| t j}||td td td f| | |t g d(g d)g dgg d*g d+g dgg d%g d,g dgg d S )-N	   r   r   )   r   r   ),  r   r   r   r!   r   )r      f   )r        )r   i_  4     )r   r   r   )r   i     )r   i     )r        )        )   i     )r   i     )        )   i     r   r   r!   )i  r   i  )      r   )   r   i]  )j   r   r   )r   r       )   r   if  )s      i=  )r      r4   )   r   io  )|      iF  r   r   r   r6   )r         )   r   ic  )r         )r         )v      i@  )r         )r         )r   r   i.  )g      i1  )m      i7  )p      i:  )y      iC  )	r(   r   r:   r   r|   r   r   asarrayrh   )r   rj   rp   r   r   r   r   test_ufunc_at_multiD  s   
$

$

 


z!TestDUFuncAt.test_ufunc_at_multiDc                 C   s   t d}| t j}||dd | |t d | t ||dd W d    n1 s0w   Y  t d}||dd | |t g d | t ||g d W d    d S 1 sbw   Y  d S )Nr   r   r   r   )r   r   r!   )	r(   r   r|   r   rh   r%   r   r   r&   )r   rj   r   rp   r   r   r   test_ufunc_at_0Df  s   

"zTestDUFuncAt.test_ufunc_at_0Dc                 C   s@   t d}| t j}||g dd | |t g d d S )Nr    )r   r!   r   r!   g      @)
r   r   i>  .   r   r6   r   r   r   r   )r(   r   r|   powerrh   r   )r   rj   power_atr   r   r   test_ufunc_at_dtypesx  s   
z!TestDUFuncAt.test_ufunc_at_dtypesc                 C   sL   t d}|d dk}| t j}|||g d | |t g d d S )Nr    r!   r   )r   r!   r   r   r   )
r   r   r   r   r   r6   r   r   r   r   )r(   r   r|   equalrh   r   )r   rj   r   equal_atr   r   r   test_ufunc_at_boolean  s
   
z"TestDUFuncAt.test_ufunc_at_booleanc                 C   sH   t jddd}| t j}||g d | |t jg dt jd d S )Nr    u4r}   r   )
r   r   r!   r   r   l    r   r   r   r   )r(   r   r|   invertrh   r   uint32)r   rj   	invert_atr   r   r   test_ufunc_at_boolean2  s   z#TestDUFuncAt.test_ufunc_at_boolean2c                 C   s\   t d}|d d d f d d ddf }| t j}||ddgd | |t d d S )Nr   r   r   r   )r(   r   r|   r   rh   )r   origrj   r   r   r   r   test_ufunc_at_advanced  s
   
 z#TestDUFuncAt.test_ufunc_at_advancedc                 C   s`   t g dt d }t g dt d }| t j}|||d | |g d d S )Nr   i)r   r!   r   r   fr   )r   r   r   r   )r(   r   r~   newbyteorderr|   r   rh   )r   r   r   r   r   r   r   test_ufunc_at_advanced_2  s
   z%TestDUFuncAt.test_ufunc_at_advanced_2c                 C   sv   t jddgtd}| t j}| t ||ddgd W d    n1 s'w   Y  | |t jddgtd d S )Nrj   r   r}   r   )r(   r   objectr|   r   r%   r   rh   )r   r   r   r   r   r   test_ufunc_at_advanced_3  s   z%TestDUFuncAt.test_ufunc_at_advanced_3c                 C   sN   |  tj}| t |tddg W d    d S 1 s w   Y  d S )Nr    r   )r|   r(   modfr%   r   r   )r   modf_atr   r   r   test_ufunc_at_advanced_4  s   "z%TestDUFuncAt.test_ufunc_at_advanced_4c                 C   sB   |  tj}tg d}||dgd | |tg d d S )Nr   r   )r|   r(   maximumr   rh   )r   
maximum_atrj   r   r   r   test_ufunc_at_advanced_5  s   z%TestDUFuncAt.test_ufunc_at_advanced_5c              	   C   s  t jd t jd  }t jt jt jt jt jf}|D ]q}|dv rqz	tt | W n	 t	y1   Y qw |D ]T}t 
dd|}t g dt j}t jg d|jd}| }t||D ]\}	}
|||	 |
||	< q]| |}|||| t j|| t |g dksJ q4qd S )	N
AllIntegerFloat)er   r    )r   r   r   r!   )r   r6   r!   r    r}   )r(   r   r   r   divideminimumr  r
   r~   r   r   astyper   r   rf   zipr|   r8   r9   r   )r   dtypesr   r~   ri   rj   indxsvalsrl   r  vr   r   r   r   test_ufunc_at_negative_indexes  s.   
z+TestDUFuncAt.test_ufunc_at_negative_indexesc                 C   sd   t d}t d}| t j}d}| t| ||dg| W d    d S 1 s+w   Y  d S )N)r!   r!   r!   )r   r!   r!   z1does not support ufunc with non-trivial signaturer   )r(   r   r|   matmulr   r   )r   rj   rp   	matmul_atr   r   r   r    test_ufunc_at_not_none_signature  s   

"z-TestDUFuncAt.test_ufunc_at_not_none_signaturec                 C   s^   t jdtd}| t j}| t ||ddgddg W d    d S 1 s(w   Y  d S )Nr    r}   r   r   )r(   r   strr|   r   r%   r   r   r   r   r   test_ufunc_at_no_loop_for_op  s
   "z)TestDUFuncAt.test_ufunc_at_no_loop_for_opc                 C   s<   t dg}| t j}||dgdg |d dksJ d S )Nr   r   )r(   r   r|   r   )r   r   r   r   r   r   test_ufunc_at_output_casting  s   z)TestDUFuncAt.test_ufunc_at_output_castingc                 C   s`   t d}| t j}d}| t| ||ddgg d W d    d S 1 s)w   Y  d S )Nr6   z=operands could not be broadcast together with remapped shapesr   r   r   )r(   r   r|   r   r   r&   )r   r   r   msgr   r   r   test_ufunc_at_broadcast_failure  s   
"z,TestDUFuncAt.test_ufunc_at_broadcast_failurec                 C   sN   t d}tdd }| t|jd ||ddg | t|jd d S )Nr6   c                 S   s   | d S )Nr   r   xr   r   r   inc     z/TestDUFuncAt.test_ufunc_at_dynamic.<locals>.incr   r   r   )r(   r   r   r-   rQ   rO   rg   assertGreater)r   r   r)  r   r   r   test_ufunc_at_dynamic  s   

z"TestDUFuncAt.test_ufunc_at_dynamicc                 C   s   t d}| t j}tjdd}tdt ||ddgd W d    n1 s*w   Y  | t	|d | 
dt|d j d S )	Nr6   T)recordalwaysr   r   r    z ufunc.at feature is experimental)r(   r   r|   r   warningscatch_warningssimplefilterr   r+  rQ   assertInr"  message)r   r   r   wr   r   r   "test_ufunc_at_experimental_warning  s   
z/TestDUFuncAt.test_ufunc_at_experimental_warningN)rb   rc   rd   rn   r|   r   r   r   r   r   r   r   r   r   r   r   r  r  unittestexpectedFailurer
  r  r  r  r  r!  r#  r$  r&  r,  r5  r   r   r   r   re      s:    $	
U	

	re   c                   @   st   e Zd ZdddZej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S )TestDUFuncReduceNumPyTestsNc                    sN    j dkrt|d fddnt|d fddtd	fdd	}|S )
Nr!   rP   c                    rE   r   r   ro   rq   r   r   rr     rs   z:TestDUFuncReduceNumPyTests._generate_jit.<locals>.<lambda>c                    rt   r   r   ru   rq   r   r   rr     rv   r   c                    s    j | ||dS Naxisinitialreduce)r   r<  r=  rx   r   r   rZ     r2   z4TestDUFuncReduceNumPyTests._generate_jit.<locals>.fn)r   Nrz   )r   ri   rP   rZ   r   r{   r   r|     s   
z(TestDUFuncReduceNumPyTests._generate_jitc                 C   s0   |  tj}tjd}|d}| || d S )Nr   )r|   r(   r   r?  rh   )r   power_reducerl   rm   r   r   r   test_numpy_scalar_reduction"  s   z6TestDUFuncReduceNumPyTests.test_numpy_scalar_reductionc                 C   s  dd }| j tjdd}d|d< d|d< |||d d	d |||d
d	g d |||dd	g d |||dd	ddg |||dd	g dg dg dg |||dd	g dg dg |||dd	g dg dg |||dd	| d|d< d|d< |||d d	d |||d
d	g d |||dd	g d |||dd	ddg |||dd	g dg dg dg |||dd	g dg dg |||dd	g dg dg |||dd	| d|d< d|d< |||d d	d |||d
d	g d |||dd	g d |||dd	ddg |||dd	g dg dg dg |||dd	g dg dg |||dd	g dg dg |||dd	| d S )Nc                 S   s   t j| | d S r   )r(   r8   assert_equalro   r   r   r   compare_output+  s   zOTestDUFuncReduceNumPyTests.check_identityless_reduction.<locals>.compare_outputreorderabler9  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   rj   rC  minimum_reducer   r   r   check_identityless_reduction*  sd   z7TestDUFuncReduceNumPyTests.check_identityless_reductionc                 C      t jddd}| | d S )Nr!   r   r   Corderr(   emptyrK  r   rj   r   r   r   (test_numpy_identityless_reduction_cordera     zCTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_corderc                 C   rL  )NrM  FrO  rQ  rS  r   r   r   (test_numpy_identityless_reduction_fordere  rU  zCTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_forderc                 C   s$   t jddddd}| | d S )N)r!   r   r   rN  rO  r   r!   r(   rR  swapaxesrK  rS  r   r   r   ,test_numpy_identityless_reduction_otherorderi  s   zGTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_otherorderc                 C   s>   t jddddd}|dd dd dd f }| | d S )N)r   r6   r   rN  rO  r   r!   rX  rS  r   r   r   +test_numpy_identityless_reduction_noncontigm  s   zFTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_noncontigc                 C   sP   t jddd}|dd  jdd}d|_|dd dd dd f }| | d S )N)i  i1r}   r   f8r   )r(   rR  viewshaperK  rS  r   r   r   5test_numpy_identityless_reduction_noncontig_unalignedr  s
   zPTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_noncontig_unalignedc              	   C   sB  |  tj}|  tj}|  tj}| |tg ddd | |tg tjdtj | |tg tj dtj  | |tdgddd | |tdgddd | |tdgddd | |tdgddd d}||fD ]!}| t	| |tg d d W d    n1 sw   Y  q}d S )Nr   r=  g        r6   r   &zero-size array to reduction operation)
r|   r(   r   r  r  rh   r   infr   r&   )r   
add_reduce
min_reduce
max_reducer%  funcr   r   r   test_numpy_initial_reductiony  s*   z7TestDUFuncReduceNumPyTests.test_numpy_initial_reductionc                 C   s   t d}| t j}t jj|dd}||dd}| || | |jd d}| t| ||dd W d    n1 s?w   Y  t d}| t| ||dd W d    n1 s`w   Y  t jj|ddd}||ddd}| || d S )	N)r   r6   r   rE  )r   rb  r   )r   r   r6   r;  )	r(   r7   r|   true_divider?  rh   r_  r   r&   )r   r   true_divide_reducerl   rm   r%  r   r   r   'test_numpy_empty_reduction_and_identity  s"   

zBTestDUFuncReduceNumPyTests.test_numpy_empty_reduction_and_identityc                 C   s   t g dg dg}| t j}||dd}| |t g d ||dd}| |t ddg ||d	d}| || d S )
N)       @rH   rH   )rG   g      ?g      ?r   rE  )rl  g      @rl  r   rH   rl  r   )r(   r   r|   r  rh   r   )r   rj   divide_reduceresr   r   r   *test_identityless_reduction_nonreorderable  s   zETestDUFuncReduceNumPyTests.test_identityless_reduction_nonreorderablec                    s  dd } fdd}dd } j tjdd} tjjd  |||d	d	 |||d
d	 |||d	d
 |||d
d
 ||g  |tddd  j tjd
d}|||d	d	 |||d
d	 |||d	d
 |||d
d
 |tjg tjd |tddd d S )Nc                 _   s   | |i | d S r   r   r  rk   kwargsr   r   r   ok  s   z<TestDUFuncReduceNumPyTests.test_reduce_zero_axis.<locals>.okc                    s>     t | |i | W d    d S 1 sw   Y  d S r   )r%   r&   rp  r   r   r   err  s   "z=TestDUFuncReduceNumPyTests.test_reduce_zero_axis.<locals>.errc              
   S   sp  | |t ||fdd | |t ||fdd | |t |d |d |fdd | |t |d ||d fdd | |t ||d |d fdd | |t |d ||d fdd | |t |d |d |d |d |d fdd | |t d	||fd
d | |t d	||fdd | |t |d	|fdd | |t d	||fdd | |t d	||fdd d S )Nr   rE  r   r!   rH  rG  r   r   r    rF  )r(   r7   )expectrg  nmr   r   r   t  s    """"z;TestDUFuncReduceNumPyTests.test_reduce_zero_axis.<locals>.trD  r9     r   r   r   r   rE  r}   )	r|   r(   r  r-   rP   r7   r   r   int64)r   rr  rt  rx  maximum_reducerd  r   rs  r   test_reduce_zero_axis  s$   
z0TestDUFuncReduceNumPyTests.test_reduce_zero_axisr   )rb   rc   rd   r|   r6  r7  rA  rK  rT  rW  rZ  r[  r`  rh  rk  ro  r}  r   r   r   r   r8    s    

7r8  c                   @   sp   e Zd ZdddZd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S )TestDUFuncReduceNc           
         s   t  fdd}tdtdddtddddg}|D ]}t|jD ]}|||||}|||||}	| ||	 q(q!d S )Nc                    s    j | |||dS )N)r<  r~   r=  r>  )rj   r<  r~   r=  rq   r   r   foo  s
   z+TestDUFuncReduce._check_reduce.<locals>.foor6   r   r!   (   )r   r(   r   r:   rangendimpy_funcrh   )
r   ri   r~   r=  r  inputsr   r<  rl   rm   r   rq   r   _check_reduce  s   zTestDUFuncReduce._check_reducec                    s   t fdd fdd}dj dtjd|dd	d
dtjd|dg}|D ]) td jd D ]}tjt j|dD ]|  qEq9dD ]|  qPq/d S )Nc                    s   j | | dS r:  r>  rj   r<  )r=  ri   r   r   r    r2   z0TestDUFuncReduce._check_reduce_axis.<locals>.fooc                     s   z  }W n> tyF } z2|jd  t  }W d    n1 s/w   Y  W Y d }~d S W Y d }~d S d }~ww  }|| d S )Nr   )r  r&   r-   rk   r   r   rh   )rk   rl   r  rm   )r   r<  exc_msgr  r   r   r   _check  s   8
z3TestDUFuncReduce._check_reduce_axis.<locals>._checkzreduction operation 'z:' is not reorderable, so at most one axis may be specifiedr  r}   r6   r   r!   r    r   )r)r   N)	r   rb   r(   r   r:   r  r  	itertoolscombinations)r   ri   r~   r=  r  r  r  r   )r   r<  r  r  r=  r   ri   r   _check_reduce_axis  s    z#TestDUFuncReduce._check_reduce_axisc                 C   s.   t dddt}| | | j|tjd d S )Nint64(int64, int64)r   r9  r}   )r   r   r  r  r(   r{  r*   r   r   r   test_add_reduce/  s   
z TestDUFuncReduce.test_add_reducec                 C   s   t dddt}| | d S )Nr  r   r9  )r   r   r  )r   dumulr   r   r   test_mul_reduce4  s   z TestDUFuncReduce.test_mul_reducec                 C   sX   t dd dt}t dd dt}| | | j|tjd | | | j|tjd d S )Nr  r9  r}   )r   r   r   r  r  r(   r{  )r   dusubdudivr   r   r   test_non_associative_reduce8  s   

z,TestDUFuncReduce.test_non_associative_reducec                 C   s$   t dddt}| j|tjd d S )Nfloat64(float64, int64)r   r9  r}   )r   r   r  r(   r   r*   r   r   r   test_reduce_dtype@  s   z"TestDUFuncReduce.test_reduce_dtypec                 C   s2   t dddt}| j|dd | j|tjd d S )Nr  rD  r9  r    ra  r}   )r   r   r  r  r(   r{  )r   duminr   r   r   test_min_reduceD  s   z TestDUFuncReduce.test_min_reducec                 C   s&   t dddt}| j|tjdd d S )Nr  r   r9  r   )r~   r=  r   r   r  r(   r{  r*   r   r   r   test_add_reduce_initialI  s   z(TestDUFuncReduce.test_add_reduce_initialc                 C   s    t dt}| j|tjd d S )Nr  r}   r  r*   r   r   r   &test_add_reduce_no_initial_or_identityN  s   z7TestDUFuncReduce.test_add_reduce_no_initial_or_identityc                    s^   t dddt t fdd}d}| t| |d W d    d S 1 s(w   Y  d S )Nr  r   r9  c                    s
     | S r   r>  ru   r0   r   r   r  V  rF   z0TestDUFuncReduce.test_invalid_input.<locals>.fooz-The first argument "array" must be array-likerj   )r   r   r   r   r   )r   r  r  r   r0   r   test_invalid_inputS  s   
"z#TestDUFuncReduce.test_invalid_inputc                    sh   t dddt t fdd}tdddd	}d
}|D ]} ||}|||}| || qd S )Nr  r   r9  c                        j | |dS NrE  r>  r  r0   r   r   r  a  r   z7TestDUFuncReduce.test_dufunc_negative_axis.<locals>.foor  r6   r   r!   )r   r   )r   r   )r   )r   r   )r   r   r   r(   r   r:   r?  rh   )r   r  rj   casesr<  rl   rm   r   r0   r   test_dufunc_negative_axis^  s   
z*TestDUFuncReduce.test_dufunc_negative_axisc              	      s   t dddt t fdd}tdddd	}d
}|D ]}d}| t| ||| W d    n1 s8w   Y  qd}|D ]}| td ||| W d    n1 sZw   Y  qBd S )Nr  r   r9  c                    r  r  r>  r  r0   r   r   r  o  r   z6TestDUFuncReduce.test_dufunc_invalid_axis.<locals>.foor  r6   r   r!   )rz  rI  )r   r  )r   r   )r   r!   zduplicate value in 'axis')r   )r   r  zInvalid axis)r   r   r   r(   r   r:   r   r&   )r   r  rj   r  r<  r%  r   r0   r   test_dufunc_invalid_axisl  s$   z)TestDUFuncReduce.test_dufunc_invalid_axis)NNr   )rb   rc   rd   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r~    s    

 r~  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestDUFuncPicklingc                    sh   t |}t |  d}| d| | || t fdd}|d}| d| | || d S )N{   c                    rt   r   r   r'  rebuiltr   r   r    r*  z%TestDUFuncPickling.check.<locals>.fooiA  )pickledumpsloadsr-   assertIsInstancer   )r   identresult_typebufr  r  r   r  r   check  s   

zTestDUFuncPickling.checkc                 C   s$   t dd }| j|ttjfd d S )Nc                 S      | S r   r   x1r   r   r   r       z3TestDUFuncPickling.test_unrestricted.<locals>.identr  )r   r  r   r(   integerr   r  r   r   r   test_unrestricted  s   
z$TestDUFuncPickling.test_unrestrictedc                 C   s$   t dgdd }| j|td d S )Nzfloat64(float64)c                 S   r  r   r   r  r   r   r   r    r  z1TestDUFuncPickling.test_restricted.<locals>.identr  )r   r  r   r  r   r   r   test_restricted  s   
z"TestDUFuncPickling.test_restrictedN)rb   rc   rd   r  r  r  r   r   r   r   r    s    r  __main__)!r  r  rW   r/  numpyr(   numbar   r   numba.tests.supportr   r   numba.core.errorsr   r   r   r6  numba.np.ufuncr	   numba.np.numpy_supportr
   r   r   r   r   r   r   re   r8  r~  r  rb   mainr   r   r   r   <module>   s:    m    h "