
    J/Ph                     r   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 Zd Zd	 Zd
 Zd Z G d de
ej                  Z G d de          Z G d de          Z G d de          Z G d de
ej                  Zedk    r ej                      dS dS )    N)njit	vectorize)MemoryLeakMixinTestCase)TypingErrorNumbaNotImplementedErrorNumbaExperimentalFeatureWarning)dufunc)
from_dtypec                     | |z   S N a0a1s     `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/npyufunc/test_dufunc.pypyuaddr          7N    c                     | |z
  S r   r   r   s     r   pysubr      r   r   c                     | |z  S r   r   r   s     r   pymultr      r   r   c                     | |z  S r   r   r   s     r   pydivr      s    8Or   c                     | |k     r| n|S r   r   r   s     r   pyminr   !   s    b22b r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	
TestDUFuncc                 J    t          j        |t          d                    S )NT)nopython)targetoptions)r
   DUFuncdict)selfpyfuncs     r   nopython_dufunczTestDUFunc.nopython_dufunc'   s"    }V43F3F3FGGGGr   c           	         |                      t                    }|                     |j                   d|_        |                     |j                   |                     t                    5  d|_        d d d            n# 1 swxY w Y   |                     t                    5   |t          j	        ddd          t          j	        ddd                     d d d            d S # 1 swxY w Y   d S )NTFr      
      )
r'   r   assertFalse_frozen
assertTrueassertRaises
ValueError	TypeErrornplinspacer%   duadds     r   test_frozenzTestDUFunc.test_frozen*   s\   $$V,,'''&&&z** 	" 	"!EM	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"y)) 	< 	<E"+a"%%r{1Qr':':;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s$   0BBB)5C++C/2C/c                     |                      t                    }|                     t          dd           |dd                     d S )Nr)   r+   )r'   r   assertEqualr4   s     r   test_scalarzTestDUFunc.test_scalar4   sC    $$V,,!eeAajj11111r   c                    |                      t                    t          fd            }t          j        ddd          }|d d         }|dd          }t          j        d          } ||||           t          j                            ||z   |           |                    d          }|                    d          }t          j        d          } ||||           t          j                            ||z   |           |d d         }	t          j        d          }
 |||	|
           t          j                            ||	z   |
           d S )Nc                 "     | ||           d S r   r   )r   r   o0r5   s      r   npmaddz(TestDUFunc.test_npm_call.<locals>.npmadd;   s    E"b"r   r   ffffff?   r*   r+      rA   )	r'   r   r   r2   r3   zerostestingassert_array_equalreshape)r%   r=   XX0X1out0Y0Y1out1Y2out2r5   s              @r   test_npm_callzTestDUFunc.test_npm_call8   sR   $$V,,		 	 	 	 
	K#b!!ssVrssVx||r2t

%%b2gt444ZZZZxr2t

%%b2gt444Vxr2t

%%b2gt44444r   c                 z   |                      t                    t          fd            }t          j        ddd          }|d d         }|dd          } |||          }t          j                            ||z   |           |                    d          }|                    d          } |||          }t          j                            ||z   |           |d d         }	 |||	          }
t          j                            ||	z   |
            |dd	          }|                     |d
           d S )Nc                      | |          S r   r   )r   r   r5   s     r   r=   z8TestDUFunc.test_npm_call_implicit_output.<locals>.npmaddQ   s    5R== r   r   r>   r?   r*   r@   rA         ?       @g      @)	r'   r   r   r2   r3   rC   rD   rE   r8   )r%   r=   rF   rG   rH   rI   rJ   rK   rL   rM   rN   out3r5   s               @r   test_npm_call_implicit_outputz(TestDUFunc.test_npm_call_implicit_outputN   sA   $$V,,		! 	! 	! 	! 
	!K#b!!ssVrssVvb"~~

%%b2gt444ZZZZvb"~~

%%b2gt444Vvb"~~

%%b2gt444vb}}r"""""r   c                 t   |                      t                    }|                     |j        d           |                     |j        d           |                     |j        |j        |j        z              |                     |j        d           |                     |j        g            |                     |j        d             |dd           |                     |j        d           |                     |j        t          |j                             | 
                    |j                   d S )Nr+   r)   r   )r'   r   r8   ninnoutnargsntypestypesidentitylenassertIsNone	signaturer4   s     r   test_ufunc_propszTestDUFunc.test_ufunc_propsc   s   $$V,,A&&&Q'''ei%*&<===q)))b)))...aq)))s5;'7'7888%/*****r   c                 H   |                      t                     dd           j        j        j        j        j        d}fd}|                                D ]?\  }}t           ||                    }| 	                    | |            d|            @d S )Nr)   r+   )rW   rX   rY   r\   r_   c                 n    d|  d}i }t          t          j        |          di|           |d         S )Nz>
                def impl():
                    return duadd.z
            r5   impl)exectextwrapdedent)attrfnlr5   s      r   get_attr_fnz4TestDUFunc.test_ufunc_props_jit.<locals>.get_attr_fn|   sN    "&  B A$$w&6:::V9r   z!Attribute differs from original: )
r'   r   rW   rX   rY   r\   r_   itemsr   r8   )r%   
attributesrj   rg   valcfuncr5   s         @r   test_ufunc_props_jitzTestDUFunc.test_ufunc_props_jitp   s    $$V,,a"Y#j${ #(.#(?4 4
	 	 	 	 	 $))++ 	I 	IID#T**++ES%%''GGGI I I I	I 	Ir   N)
__name__
__module____qualname__r'   r6   r9   rO   rU   r`   ro   r   r   r   r   r   %   s        H H H< < <2 2 25 5 5,# # #*+ + +I I I I Ir   r   c                       e 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j        d             Zd Zd Zd Zd Zej        d             Zd Zd Zd Zd Zd ZdS )TestDUFuncAtc                     |                                 }|                                 } |j        |g|R    ||g|R   |                     ||           d S r   )copyatassertPreciseEqual)r%   rh   ufuncaargsexpectedgots          r   _compare_outputzTestDUFuncAt._compare_output   se    6688ffhh!D!!!!
3#.....r   c                     j         dk    r t                      fd          n t                      fd          t          fd            }|S )Nr+   c                      | |          S r   r   rz   bry   s     r   <lambda>z,TestDUFuncAt._generate_jit.<locals>.<lambda>   s    55A;; r   c                      |           S r   r   rz   ry   s    r   r   z,TestDUFuncAt._generate_jit.<locals>.<lambda>   s    a r   c                       j         |  S r   rw   )r{   vecs    r   rh   z&TestDUFuncAt._generate_jit.<locals>.fn   s    364= r   rW   r   r   )r%   ry   rh   r   s    ` @r   _generate_jitzTestDUFuncAt._generate_jit   ss    9>>)++666677CC)++000011C		! 	! 	! 	! 
	!	r   c                 j   t          j        dt                    }|                     t           j                  }|                     t           j                  } t                      d           t          fd            }|                     |t           j        |g dd           d}| 	                    t          |          5   ||                                g dd            d d d            n# 1 swxY w Y   |                     |t           j        |                                g d           t          j        g d	          }|                     |t           j        |                                g d|           d
}| 	                    t          |          5   ||                                g dg d           d d d            n# 1 swxY w Y   |                     t                    5   ||                                g dddgdg           d d d            d S # 1 swxY w Y   d S )Nr*   dtypec                 *    t          j        |           S r   )r2   negative)rz   s    r   r   z8TestDUFuncAt.test_numpy_ufunc_at_basic.<locals>.<lambda>   s    R[^^ r   c                 2                         | ||          S r   r   )rz   indicesr   negative_vecs      r   negative_jit_2z>TestDUFuncAt.test_numpy_ufunc_at_basic.<locals>.negative_jit_2   s    ??1gq111r   r+   rA   r+   r)   zsecond operand needed for ufunc)r+   rA      d   r   r   z+second operand provided when ufunc is unaryr)   r+   r   r+   )r2   arangeintr   addr   r   r   r~   assertRaisesRegexr   rv   arrayr/   )r%   rz   add_atnegative_atr   err_msgr   r   s          @r   test_numpy_ufunc_at_basicz&TestDUFuncAt.test_numpy_ufunc_at_basic   s    Ib$$$##BF++((55"y{{#;#;<<		2 	2 	2 	2 
	2 	VRVQ			1=== 4##K99 	. 	.F16688YYY---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	["+qvvxxKKKH___%%VRVQVVXXyyy!DDD @##K99 	; 	;N16688YYY			:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; {++ 	5 	5F16688YYY!Q444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s6   "C55C9<C9 $GGG5&H((H,/H,c           
      R   t           j        d         }t           j        t           j        t           j        f}|D ]W}	 t          t          j        |                     n# t          $ r Y 2w xY w|D ]}t          j        d|          }t          j	        t          j        dt           j
                  t          j        ddt           j
                  g          }|j                            d          }|                     |          } ||||           t          j        |          }	|t           j        u rdx|	d	<   |	d<   |	d	xx         d|t           j        u r|n| z  z  cc<   |	dxx         d|t           j        u r|n| z  z  cc<   Y|                     ||	           d S )
NComplexr*   r            y              ?r)   )r2   	typecodesr   subtractmultiplyr   r   r   onesconcatenateintpfulltyper   	ones_likerx   )
r%   r   ufuncstypecodery   rz   indxvalueufunc_atr|   s
             r   test_ufunc_at_inner_loopz%TestDUFuncAt.test_ufunc_at_inner_loop   s   L+	&"+r{3! 	O 	OH28H--....+      O OGBh///~rwq'@'@'@')wr1BG'D'D'D'F G GR((--e44D%(((<??BK''022HQK(1++QKKK1"&uf#MMKKKQKKK2%26//v#NNKKKKO 	8,,,,,s   !A
A+*A+c           
         t          j        dt                    }|                     t           j                  }|                     |t           j        |t          d           t          j        dt                               d S )NrA   r   )r2   rB   r   r   r   r~   slicer   r%   arrr   s      r   test_ufunc_at_ellipsisz#TestDUFuncAt.test_ufunc_at_ellipsis   sq     hq$$$##BF++VRVS%++WQc222	4 	4 	4 	4 	4r   c                     t          j        dt           j                  }t          j        d          }|                     t           j                  } |||           t          j        |g dk              sJ d S )NrA   r   )r   r   r   r   r   )r2   r   int32r   r   r   all)r%   r   r   rw   s       r   test_ufunc_at_negativez#TestDUFuncAt.test_ufunc_at_negative   sq    garx(((y||,,
3vc11112222222r   c                 l   t          j        dt           j                  }t          j        dt                    }d|d<   d|d<   d|dd <   t          j        dt                    }|                     t           j                  } ||||           |d         |                                k    sJ d S )	Ni   r   r*   r   rA   r)   r   i    )r2   rB   int16floatr   r   sum)r%   r   r   rz   r   s        r   test_ufunc_at_largez TestDUFuncAt.test_ufunc_at_large   s    (4rx000HT'''!!$%%HQe$$$##BF++q'1tquuwwr   c                 >   t          j        d          }t          j        d          }|                     t           j                  }t          j        t          |          t           j                  } ||||           |d         t          |          k    sJ d S )Nr*   i r   r   )r2   rB   r   r   r   r]   uint8)r%   r   valuesr   indexs        r   test_cast_index_fastpathz%TestDUFuncAt.test_cast_index_fastpath   s    hrll##BF++VBH555sE6"""1vV$$$$$$r   c           	         t          j        d          t          j        d          t          j        d          df}|D ]}t          j        d          }t          j        t          j        d          d          }|                     t           j                  } ||||           t           j        	                    |t          j
        |d|z                       d S )Nr)   r   rR   i  r+   )r2   r   float64rB   repeatr   r   r   rC   rD   	full_like)r%   r   r   r   r   r   s         r   #test_ufunc_at_scalar_value_fastpathz0TestDUFuncAt.test_ufunc_at_scalar_value_fastpath  s    '!**bgbkk2:b>>2> 	M 	ME(4..CIbiooq11E''//FF3u%%%J))#r|CU/K/KLLLL	M 	Mr   c                 .
   t          j        d                              dd          }t          j        g dg dg dg          }|                     t           j                  } ||t          d           t          j        g d          f|           |                     |t          j        g dg dg d	g                     t          j        d
                              ddd          }t          j        g d          } ||t          d           t          d           t          j        g d          f|           |                     |t          j        g dg dg dgg dg dg dgg dg dg dgg                     t          j        d                              dd          }t          j        g dg dg dg          } ||t          j        g d          t          d           f|           |                     |t          j        g dg dg dg                     t          j        d
                              ddd          }t          j        g d          } ||t          d           t          j        g d          t          d           f|           |                     |t          j        g dg dg dgg dg dg dgg dg dg dgg                     t          j        d                              dd          }t          j        g d          } ||dt          j        g d          f|           |                     |t          j        g dg d g d!g                     t          j        d
                              ddd          }t          j        g d          } ||t          j        g d          dt          d           f|           |                     |t          j        g dg d g d!gg d"g d#g d$gg d%g d&g d'gg                     t          j        d
                              ddd          }t          j        g d          }|                     t           j                  } ||t          d           t          d           t          d           f|           |                     |t          j        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      r?   )   r   io  )|      iF  r   r   r   rA   )r         )   r   ic  )r         )r         )v      i@  )r         )r         )r   r   i.  )g      i1  )m      i7  )p      i:  )y      iC  )	r2   r   rE   r   r   r   r   asarrayrx   )r%   rz   r   r   s       r   test_ufunc_at_multiDz!TestDUFuncAt.test_ufunc_at_multiD  s   IaLL  A&&HoooHII##BF++q5;;
999 5 56:::28]]MMM===9$; $; 	< 	< 	< IbMM!!!Q**H___%%q5;;dRZ			-B-BCQGGG28"/--"/--"/--"1 #0--"0.."0.."2 #1.."0.."0.."2
!3$4 $4 	5 	5 	5 IaLL  A&&HoooHIIq2:iii((%++6:::2:YY9$; $; 	< 	< 	< IbMM!!!Q**H___%%q5;;
999 5 5uT{{CQGGG2:"-++"1//"1//"3 #/,,"1//"1//"3 #/,,"1//"1//"3
!4$5 $5 	6 	6 	6 IaLL  A&&H___%%q1bj++,a0002:]]IIIyyy1$3 $3 	4 	4 	4 IbMM!!!Q**H___%%q2:iii((!U4[[91===2:"-++"-++"-++"/ #2//"/--"/--"1 #2//"/--"/--"1
!2$3 $3 	4 	4 	4 IbMM!!!Q**H___%%##BF++q5;;dU4[[91===2:"1//"1//"1//"3 #2//"1//"1//"3 #2//"1//"1//"3
!4$5 $5 	6 	6 	6 	6 	6r   c                 j   t          j        d          }|                     t           j                  } ||dd           |                     |t          j        d                     |                     t                    5   ||dd           d d d            n# 1 swxY w Y   t          j        d          } ||dd           |                     |t          j        g d                     |                     t                    5   ||g d           d d d            d S # 1 swxY w Y   d S )Nr   r   r)   r   )r)   r)   r+   )	r2   r   r   r   rx   r/   r   r   r0   )r%   rz   r   r   s       r   test_ufunc_at_0DzTestDUFuncAt.test_ufunc_at_0Df  s   HQKK##BF++q"a28A;;///{++ 	 	F1aOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 IaLLq!Q28III#6#6777 z** 	 	F1b!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   BB!$B!D((D,/D,c                     t          j        d          }|                     t           j                  } ||g dd           |                     |t          j        g d                     d S )Nr*   )r)   r+   r   r+   g      @)
r   r)   i>  .   r   rA   r   r   r   r   )r2   r   r   powerrx   r   )r%   rz   power_ats      r   test_ufunc_at_dtypesz!TestDUFuncAt.test_ufunc_at_dtypesx  si    IbMM%%bh//LLL#&&&28,N,N,N#O#OPPPPPr   c                     t          j        d          }|dz  dk    }|                     t           j                  } |||g d           |                     |t          j        g d                     d S )Nr*   r+   r   )r   r+   r   r   r   )
r)   r)   r)   r   r)   rA   r)   r   r)   r   )r2   r   r   equalrx   r   )r%   rz   r   equal_ats       r   test_ufunc_at_booleanz"TestDUFuncAt.test_ufunc_at_boolean  sv    IbMMA
%%bh//E???+++28,J,J,J#K#KLLLLLr   c                     t          j        dd          }|                     t           j                  } ||g d           |                     |t          j        g dt           j                             d S )Nr*   u4r   r   )
r   r)   r+   r   r   l    r   r   r   r   )r2   r   r   invertrx   r   uint32)r%   rz   	invert_ats      r   test_ufunc_at_boolean2z#TestDUFuncAt.test_ufunc_at_boolean2  s    Ib%%%&&ry11		!YYY28 -6 -6 -6=?Y$H $H $H 	I 	I 	I 	I 	Ir   c                 
   t          j        d          }|d d d f         d d ddf         }|                     t           j                  } ||ddgd           |                     |t          j        d                     d S )Nr   r   r)   r   )r2   r   r   r   rx   )r%   origrz   r   s       r   test_ufunc_at_advancedz#TestDUFuncAt.test_ufunc_at_advanced  s    y||DM!!!QqS&!##BF++q1a&!bill33333r   c                 z   t          j        g dt          j        d                                                    }t          j        g dt          j        d                                                    }|                     t           j                  } |||d           |                     |g d           d S )Nr   i)r)   r+   r   r   fr   )r)   r   r   r   )r2   r   r   newbyteorderr   r   rx   )r%   r   r   r   s       r   test_ufunc_at_advanced_2z%TestDUFuncAt.test_ufunc_at_advanced_2  s     BHSMM$>$>$@$@AA,,,(B(B(D(DEE##BF++vua   55555r   c                 b   t          j        ddgt                    }|                     t           j                  }|                     t                    5   ||ddgd           d d d            n# 1 swxY w Y   |                     |t          j        ddgt                               d S )Nrz   r)   r   r   )r2   r   objectr   r   r/   r   rx   )r%   r   r   s      r   test_ufunc_at_advanced_3z%TestDUFuncAt.test_ufunc_at_advanced_3  s    3(&111##BF++{++ 	& 	&F6Aq61%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&#q(H(H(HIIIIIs   A33A7:A7c                     |                      t          j                  }|                     t                    5   |t          j        d          dg           d d d            d S # 1 swxY w Y   d S )Nr*   r)   )r   r2   modfr/   r   r   )r%   modf_ats     r   test_ufunc_at_advanced_4z%TestDUFuncAt.test_ufunc_at_advanced_4  s    $$RW--{++ 	( 	(GBIbMMA3'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s    A''A+.A+c                     |                      t          j                  }t          j        g d          } ||dgd           |                     |t          j        g d                     d S )Nr   r   )r   r2   maximumr   rx   )r%   
maximum_atrz   s      r   test_ufunc_at_advanced_5z%TestDUFuncAt.test_ufunc_at_advanced_5  sj    ''
33
HYYY
1qc128III#6#677777r   c                 x   t           j        d         t           j        d         z   }t           j        t           j        t           j        t           j        t           j        f}|D ]W}|dv r	 t          t          j        |                     n# t          $ r Y 7w xY w|D ]}t          j
        dd                              |          }t          j        g d                              t           j                  }t          j        g d|j                  }|                                }t          ||          D ]\  }	}
 |||	         |
          ||	<   |                     |          } ||||           t           j                            ||           t          j        |g dk              sJ Yd S )	N
AllIntegerFloat)er   r*   )r   r)   r   r+   )r)   rA   r+   r*   r   )r2   r   r   r   divideminimumr/  r   r   r   r   astyper   r   rv   zipr   rC   rD   r   )r%   dtypesr   r   ry   rz   indxsvalsr|   r#  vr   s               r   test_ufunc_at_negative_indexesz+TestDUFuncAt.test_ufunc_at_negative_indexes  s   l+bl7.CC&"+ry"*bjI 	7 	7E28E??+++++      7 7Ia$$++E220077@@xQW===6688t,, 8 8DAq"'%Q"7"7HQKK--e44E4(((
--a:::ve~~~56666667	7 	7s   *!B
BBc                    t          j        d          }t          j        d          }|                     t           j                  }d}|                     t
          |          5   ||dg|           d d d            d S # 1 swxY w Y   d S )N)r+   r+   r+   )r)   r+   r+   z1does not support ufunc with non-trivial signaturer   )r2   r   r   matmulr   r   )r%   rz   r   	matmul_atr   s        r    test_ufunc_at_not_none_signaturez-TestDUFuncAt.test_ufunc_at_not_none_signature  s     GIGI&&ry11	E##K99 	! 	!Ia!a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   %BBBc                    t          j        dt                    }|                     t           j                  }|                     t                    5   ||ddgddg           d d d            d S # 1 swxY w Y   d S )Nr*   r   r   r)   )r2   r   strr   r   r/   r   r   s      r   test_ufunc_at_no_loop_for_opz)TestDUFuncAt.test_ufunc_at_no_loop_for_op  s    gb$$$##BF++{++ 	( 	(F3AA'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   A44A8;A8c                     t          j        dg          }|                     t           j                  } ||dgdg           |d         dk    sJ d S )Nr   r   )r2   r   r   r  )r%   r   r  s      r   test_ufunc_at_output_castingz)TestDUFuncAt.test_ufunc_at_output_casting  sS    htnn%%bh//qcA31v{{{{{{r   c                     t          j        d          }|                     t           j                  }d}|                     t
          |          5   ||ddgg d           d d d            d S # 1 swxY w Y   d S )NrA   z=operands could not be broadcast together with remapped shapesr   r)   r   )r2   r   r   r   r   r0   )r%   r   r   msgs       r   test_ufunc_at_broadcast_failurez,TestDUFuncAt.test_ufunc_at_broadcast_failure  s    ill##BF++ N##J44 	+ 	+F3A			***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A00A47A4c                    t          j        d          }t          d             }|                     t	          |j                  d           |                    |ddg           |                     t	          |j                  d           d S )NrA   c                     | dz   S )Nr)   r   )xs    r   incz/TestDUFuncAt.test_ufunc_at_dynamic.<locals>.inc  s    q5Lr   r   r)   r   )r2   r   r   r8   r]   r[   rw   assertGreater)r%   r   rN  s      r   test_ufunc_at_dynamicz"TestDUFuncAt.test_ufunc_at_dynamic  s    ill		 	 
	 	SY+++ 	sQF3sy>>1-----r   c                    t          j        d          }|                     t           j                  }t	          j        d          5 }t	          j        dt                      ||ddgd           d d d            n# 1 swxY w Y   |                     t          |          d           | 
                    dt          |d         j                             d S )	NrA   T)recordalwaysr   r   r*   z ufunc.at feature is experimental)r2   r   r   r   warningscatch_warningssimplefilterr	   rO  r]   assertInrD  message)r%   r   r   ws       r   "test_ufunc_at_experimental_warningz/TestDUFuncAt.test_ufunc_at_experimental_warning  s    ill##BF++$D111 	$Q!(,KLLLF3A###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 	3q661%%%8#adl:K:KLLLLLs   	*A??BBN)rp   rq   rr   r~   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  unittestexpectedFailurer&  r)  r-  r1  r>  rB  rE  rG  rJ  rP  rZ  r   r   r   rt   rt      s       / / /	 	 	"5 "5 "5H- - -44 4 43 3 3
 
 
% % %M M MS6 S6 S6j  $Q Q QM M MI I I4 4 4 6 6 6J J J( ( (8 8 87 7 78 ! ! !( ( (  + + +. . .
M 
M 
M 
M 
Mr   rt   c                   r    e Zd ZddZej        d             Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd ZdS )TestDUFuncReduceNumPyTestsNc                     j         dk    r t          |          fd          n t          |          fd          t          dfd	            }|S )Nr+   r\   c                      | |          S r   r   r   s     r   r   z:TestDUFuncReduceNumPyTests._generate_jit.<locals>.<lambda>  s    EE!QKK r   c                      |           S r   r   r   s    r   r   z:TestDUFuncReduceNumPyTests._generate_jit.<locals>.<lambda>  s    q r   r   c                 4                         | ||          S Naxisinitialreduce)r   rf  rg  r   s      r   rh   z4TestDUFuncReduceNumPyTests._generate_jit.<locals>.fn  s    ::e$:@@@r   )r   Nr   )r%   ry   r\   rh   r   s    `  @r   r   z(TestDUFuncReduceNumPyTests._generate_jit  s    9>>.)X.../G/G/G/GHHCC.)X.../A/A/A/ABBC		A 	A 	A 	A 	A 
	A	r   c                     |                      t          j                  }t          j                            d          } |d          }|                     ||           d S )Nr   )r   r2   r  ri  rx   )r%   power_reducer|   r}   s       r   test_numpy_scalar_reductionz6TestDUFuncReduceNumPyTests.test_numpy_scalar_reduction"  sU     ))"(338??1%%l1oo#.....r   c                 |   d }|                      t          j        d          }d|d<   d|d<    | ||d           d            | ||d	          g d
            | ||d          g d            | ||d          ddg            | ||d          g d
g dg dg            | ||d          g dg d
g            | ||d          g dg dg            | ||d          |           d|d<   d|d<    | ||d           d            | ||d	          g d
            | ||d          g d            | ||d          ddg            | ||d          g dg d
g dg            | ||d          g d
g dg            | ||d          g dg dg            | ||d          |           d|d<   d|d<    | ||d           d            | ||d	          g d            | ||d          g d            | ||d          ddg            | ||d          g dg dg dg            | ||d          g dg dg            | ||d          g dg dg            | ||d          |           d S )Nc                 F    t           j                            | |           d S r   )r2   rC   assert_equal)rz   r   s     r   compare_outputzOTestDUFuncReduceNumPyTests.check_identityless_reduction.<locals>.compare_output+  s"     J##Aq)))))r   reorderabler`  r)   .r   )r)   r   r   rf  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   r2   r7  )r%   rz   rp  minimum_reduces       r   check_identityless_reductionz7TestDUFuncReduceNumPyTests.check_identityless_reduction*  sv   	* 	* 	* ++BJ+OO
 #'
~~ad333Q777~~af555|||DDD~~af555yyyAAA~~af5551v>>>~~aa000$lllLLLA	C 	C 	C~~aa000$lll3	5 	5 	5~~aa000!		999-	/ 	/ 	/~~ab1111555#'
~~ad333Q777~~af555|||DDD~~af555yyyAAA~~af5551v>>>~~aa000$lllLLLA	C 	C 	C~~aa000$lll3	5 	5 	5~~aa000!		999-	/ 	/ 	/~~ab1111555#'
~~ad333Q777~~af555|||DDD~~af555yyyAAA~~af5551v>>>~~aa000$lllLLLA	C 	C 	C~~aa000$lll3	5 	5 	5~~aa000!		999-	/ 	/ 	/~~ab111155555r   c                 \    t          j        dd          }|                     |           d S )Nr+   r   r   Corderr2   emptyrx  r%   rz   s     r   (test_numpy_identityless_reduction_corderzCTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_cordera  0    HYc***))!,,,,,r   c                 \    t          j        dd          }|                     |           d S )Nrz  Fr|  r~  r  s     r   (test_numpy_identityless_reduction_forderzCTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_fordere  r  r   c                     t          j        dd                              dd          }|                     |           d S )N)r+   r   r   r{  r|  r)   r+   r2   r  swapaxesrx  r  s     r   ,test_numpy_identityless_reduction_otherorderzGTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_otherorderi  s@    HYc***33Aq99))!,,,,,r   c                     t          j        dd                              dd          }|dd dd dd f         }|                     |           d S )N)r   rA   r   r{  r|  r)   r+   r  r  s     r   +test_numpy_identityless_reduction_noncontigzFTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_noncontigm  s[    HYc***33Aq99abb!""abbjM))!,,,,,r   c                     t          j        dd          }|dd                              d          }d|_        |dd dd dd f         }|                     |           d S )N)i  i1r   r)   f8r   )r2   r  viewshaperx  r  s     r   5test_numpy_identityless_reduction_noncontig_unalignedzPTestDUFuncReduceNumPyTests.test_numpy_identityless_reduction_noncontig_unalignedr  sn    H)666abbEJJTJ""abb!""abbjM))!,,,,,r   c                    |                      t          j                  }|                      t          j                  }|                      t          j                  }|                      |t          j        g           d          d           |                      |t          j        g           t          j                  t          j                   |                      |t          j        g           t          j                   t          j                    |                      |t          j        dg          d          d           |                      |t          j        dg          d          d           |                      |t          j        dg          d          d           |                      |t          j        dg          d          d           d}||fD ]T}|                     t          |          5   |t          j        g           d            d d d            n# 1 swxY w Y   Ud S )Nr   rg  g        rA   r   &zero-size array to reduction operation)
r   r2   r   r7  r/  rx   r  infr   r0   )r%   
add_reduce
min_reduce
max_reducerI  funcs         r   test_numpy_initial_reductionz7TestDUFuncReduceNumPyTests.test_numpy_initial_reductiony  sR   ''//
''
33
''
33
 	

2:b>>1 E E EsKKK 	

2:b>>26 J J J "	( 	( 	(

2:b>>BF7 K K K!#	) 	) 	) 	

2:qc??A F F FJJJ

2:qc??A F F FJJJ

2:qc??A F F FJJJ

2:qc??A F F FJJJ 7, 	3 	3D''
C88 3 3RZ^^T22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3s    I  I	I	c                    t          j        d          }|                     t           j                  }t           j                            |d          } ||d          }|                     ||           |                     |j        d           d}|                     t          |          5   ||d           d d d            n# 1 swxY w Y   t          j        d          }|                     t          |          5   ||d           d d d            n# 1 swxY w Y   t           j                            |dd          } ||dd          }|                     ||           d S )	N)r   rA   r)   rr  )r   r  r   )r   r   rA   re  )	r2   rB   r   true_divideri  rx   r  r   r0   )r%   r   true_divide_reducer|   r}   rI  s         r   'test_numpy_empty_reduction_and_identityzBTestDUFuncReduceNumPyTests.test_numpy_empty_reduction_and_identity  s   hv!//?? >((1(55  1---#...	4000 7##J44 	, 	,s++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, hy!!##J44 	, 	,s++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, >((1a(@@  1a888#.....s$   0C

CCDD"%D"c                    t          j        g dg dg          }|                     t           j                  } ||d          }|                     |t          j        g d                      ||d          }|                     |t          j        ddg                      ||d	          }|                     ||           d S )
N)       @rS   rS   )rR   g      ?g      ?r   rr  )r  g      @r  r)   rS   r  r   )r2   r   r   r6  rx   r  )r%   rz   divide_reduceress       r   *test_identityless_reduction_nonreorderablezETestDUFuncReduceNumPyTests.test_identityless_reduction_nonreorderable  s    Hooo'7'7'7899**2955mAA&&&RZ%@%@AAAmAA&&&RZc
%;%;<<<mAB'''Q'''''r   c                     d } fd}d }                      t          j        d          }                     t          j        j        d             |||dd            |||dd            |||dd            |||dd            ||g             |t          j        d          d	
                                 t          j        d          } |||dd            |||dd            |||dd            |||dd            |t          j        g t          j                              |t          j        d          d	
           d S )Nc                      | |i | d S r   r   )r$  r{   kwargss      r   okz<TestDUFuncReduceNumPyTests.test_reduce_zero_axis.<locals>.ok  s    Atvr   c                 ~                         t                    5   | |i | d d d            d S # 1 swxY w Y   d S r   )r/   r0   )r$  r{   r  r%   s      r   errz=TestDUFuncReduceNumPyTests.test_reduce_zero_axis.<locals>.err  s    "":.. # #4"6"""# # # # # # # # # # # # # # # # # #s   	266c                     | |t          j        ||f          d            | |t          j        ||f          d            | |t          j        |dz  |dz  |f          d            | |t          j        |dz  ||dz  f          d            | |t          j        ||dz  |dz  f          d            | |t          j        |dz  ||dz  f          d            | |t          j        |dz  |dz  |dz  |dz  |dz  f          d            | |t          j        d	||f          d
            | |t          j        d	||f          d            | |t          j        |d	|f          d            | |t          j        d	||f          d            | |t          j        d	||f          d           d S )Nr)   rr  r   r+   ru  rt  r   r   r*   rs  )r2   rB   )expectr  nms       r   tz;TestDUFuncReduceNumPyTests.test_reduce_zero_axis.<locals>.t  s+   F41a&))2222F41a&))2222F416161"566Q????F4161a1f"566Q????F41a1fa1f"566VDDDDF4161a1f"566VDDDDF4161616#$616#3 4 4:CE E E E F42q!*--F;;;;F42q!*--F;;;;F41b!*--A6666F42q!*--A6666F42q!*--A666666r   rq  r`     r   r   r   r   rr  r   )	r   r2   r/  r8   r\   rB   r   r   int64)r%   r  r  r  maximum_reducer  s   `     r   test_reduce_zero_axisz0TestDUFuncReduceNumPyTests.test_reduce_zero_axis  s   	 	 		# 	# 	# 	# 	#	7 	7 	7$ ++BJ+OO,d333	"nb"%%%	"na$$$	#~r1%%%	#~q!$$$NBrx''b1111 ''';;
	"j"b!!!	"j!R   	"j"a   	"j!Q
28Bbh///000
28F##"------r   r   )rp   rq   rr   r   r[  r\  rl  rx  r  r  r  r  r  r  r  r  r  r   r   r   r^  r^    s        	 	 	 	 / / /56 56 56n- - -- - -- - -- - -
- - -3 3 3:/ / /2( ( ( 8. 8. 8. 8. 8.r   r^  c                   Z    e Zd ZddZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd ZdS )TestDUFuncReduceNc                    t           fd            }t          j        d          t          j        d                              dd          t          j        d                              ddd          g}|D ]U}t	          |j                  D ]>}|                    ||||          } |||||          }	|                     ||	           ?Vd S )Nc                 6                         | |||          S )N)rf  r   rg  rh  )rz   rf  r   rg  ry   s       r   fooz+TestDUFuncReduce._check_reduce.<locals>.foo  s)    <<%)&+(/   1 1 1r   rA   r   r+   (   )r   r2   r   rE   rangendimpy_funcrx   )
r%   ry   r   rg  r  inputsr   rf  r|   r}   s
    `        r   _check_reducezTestDUFuncReduce._check_reduce  s    		1 	1 	1 	1 
	1 IaLLIaLL  A&&IbMM!!!Q**

  	7 	7Eej)) 7 7;;udE7CCc%ug66''#66667	7 	7r   c                    	
 t           fd            
	
 fd}dj         d	t          j        d|                              ddd	          t          j        d
|          g}|D ]et          dj        dz             D ]9}t          j        t          j                  |          D ] |           :dD ] |           fd S )Nc                 4                         | |          S rd  rh  )rz   rf  rg  ry   s     r   r  z0TestDUFuncReduce._check_reduce_axis.<locals>.foo  s    <<g<>>>r   c                  v   	                                }           }                    ||           d S # t          $ rq}                    |j        d                                        t                    5             }d d d            n# 1 swxY w Y   Y d }~d S Y d }~d S d }~ww xY w)Nr   )r  rx   r0   r8   r{   r   r   )	r{   r|   r}   r5  r   rf  exc_msgr  r%   s	       r   _checkz3TestDUFuncReduce._check_reduce_axis.<locals>._check  s?   7;;ud33 c%&&''#66666  + + +  G444++KAA + +#eT**C+ + + + + + + + + + + + + + + + + + + + + + + + + + ++s9   = 
B8<B3BB3B 	 B3#B 	$B33B8zreduction operation 'z:' is not reorderable, so at most one axis may be specifiedr  r   rA   r   r+   r*   r)   )r)r   N)	r   rp   r2   r   rE   r  r  	itertoolscombinations)r%   ry   r   rg  r  r  r#  r   rf  r  r  s   `` `   @@@@r   _check_reduce_axisz#TestDUFuncReduce._check_reduce_axis  sc   		? 	? 	? 	? 	? 
	?		7 		7 		7 		7 		7 		7 		7 		7 		7G5> G G G Ib&&&..q!Q77Ib&&&
  	$ 	$E1ej1n-- ( (%253D3DJJJ ( (DF5$''''( # $ $ud####$	$ 	$r   c                      t          dd          t                    }|                     |           |                     |t          j                   d S )Nint64(int64, int64)r   r`  r   )r   r   r  r  r2   r  r4   s     r   test_add_reducez TestDUFuncReduce.test_add_reduce/  sT    <	/!<<<VDD5!!!RX66666r   c                 n     t          dd          t                    }|                     |           d S )Nr  r)   r`  )r   r   r  )r%   dumuls     r   test_mul_reducez TestDUFuncReduce.test_mul_reduce4  s9    <	/!<<<VDD5!!!!!r   c                 Z    t          dd           t                    } t          dd           t                    }|                     |           |                     |t
          j                   |                     |           |                     |t
          j                   d S )Nr  r`  r   )r   r   r   r  r  r2   r  )r%   dusubdudivs      r   test_non_associative_reducez,TestDUFuncReduce.test_non_associative_reduce8  s    ?	/$???FF?	/$???FF5!!!RX6665!!!RX66666r   c                      t          dd          t                    }|                     |t          j                   d S )Nfloat64(float64, int64)r   r`  r   )r   r   r  r2   r   r4   s     r   test_reduce_dtypez"TestDUFuncReduce.test_reduce_dtype@  s@    @	3a@@@HH5
33333r   c                      t          dd          t                    }|                     |d           |                     |t          j                   d S )Nr  rq  r`  r*   r  r   )r   r   r  r  r2   r  )r%   dumins     r   test_min_reducez TestDUFuncReduce.test_min_reduceD  sY    H	/-HHHOO5"---RX66666r   c                      t          dd          t                    }|                     |t          j        d           d S )Nr  r   r`  r   )r   rg  r   r   r  r2   r  r4   s     r   test_add_reduce_initialz(TestDUFuncReduce.test_add_reduce_initialI  sB    <	/!<<<VDD5#>>>>>r   c                      t          d          t                    }|                     |t          j                   d S )Nr  r   r  r4   s     r   &test_add_reduce_no_initial_or_identityz7TestDUFuncReduce.test_add_reduce_no_initial_or_identityN  s;    0	/0088511111r   c                      t          dd          t                    t          fd            }d}|                     t          |          5   |d           d d d            d S # 1 swxY w Y   d S )Nr  r   r`  c                 .                         |           S r   rh  )rz   r5   s    r   r  z0TestDUFuncReduce.test_invalid_input.<locals>.fooV  s    <<??"r   z-The first argument "array" must be array-likerz   )r   r   r   r   r   )r%   r  r  r5   s      @r   test_invalid_inputz#TestDUFuncReduce.test_invalid_inputS  s    @	3a@@@HH		# 	# 	# 	# 
	# B##K99 	 	CHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A))A-0A-c                 :    t          dd          t                    t          fd            }t          j        d                              ddd          }d	}|D ]:}                    ||          } |||          }|                     ||           ;d S )
Nr  r   r`  c                 2                         | |          S Nrr  rh  rz   rf  r5   s     r   r  z7TestDUFuncReduce.test_dufunc_negative_axis.<locals>.fooa      <<<---r   r  rA   r   r+   )r   r   )r   r   )r   )r)   r   )r   r   r   r2   r   rE   ri  rx   )r%   r  rz   casesrf  r|   r}   r5   s          @r   test_dufunc_negative_axisz*TestDUFuncReduce.test_dufunc_negative_axis^  s    <	/!<<<VDD		. 	. 	. 	. 
	. IbMM!!!Q**7 	3 	3D||At,,H#a,,C##Hc2222	3 	3r   c                     t          dd          t                    t          fd            }t          j        d                              ddd          }d	}|D ]C}d
}|                     t          |          5   |||           d d d            n# 1 swxY w Y   Dd}|D ]A}|                     t          d          5   |||           d d d            n# 1 swxY w Y   Bd S )Nr  r   r`  c                 2                         | |          S r  rh  r  s     r   r  z6TestDUFuncReduce.test_dufunc_invalid_axis.<locals>.fooo  r  r   r  rA   r   r+   )r  rv  )r   r  )r   r   )r   r+   zduplicate value in 'axis')r   )r   r  zInvalid axis)r   r   r   r2   r   rE   r   r0   )r%   r  rz   r  rf  rI  r5   s         @r   test_dufunc_invalid_axisz)TestDUFuncReduce.test_dufunc_invalid_axisl  s   <	/!<<<VDD		. 	. 	. 	. 
	. IbMM!!!Q**? 	 	D-C''
C88  At               " 	 	D''
NCC  At              	 	s$   ?BB	B	CC"	%C"	)NNr   )rp   rq   rr   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s        7 7 7 7($ $ $ $@7 7 7
" " "7 7 74 4 47 7 7
? ? ?
2 2 2
	 	 	3 3 3    r   r  c                        e Zd Zd Zd Zd ZdS )TestDUFuncPicklingc                 X   t          j        |          }t          j        |           d          }|                     d|           |                     ||           t
          fd            } |d          }|                     d|           |                     ||           d S )N{   c                      |           S r   r   )rM  rebuilts    r   r  z%TestDUFuncPickling.check.<locals>.foo  s    71::r   iA  )pickledumpsloadsr8   assertIsInstancer   )r%   identresult_typebufr  r  r  s         @r   checkzTestDUFuncPickling.check  s    l5!!,s## GCLLa   a--- 
	 	 	 	 
	 CHHa   a-----r   c                 v    t           d             }|                     |t          t          j        f           d S )Nc                     | S r   r   x1s    r   r  z3TestDUFuncPickling.test_unrestricted.<locals>.ident      Ir   r  )r   r  r   r2   integerr%   r  s     r   test_unrestrictedz$TestDUFuncPickling.test_unrestricted  s@    		 	 
	 	

5sBJ&7
88888r   c                 p    t          dg          d             }|                     |t                     d S )Nzfloat64(float64)c                     | S r   r   r  s    r   r  z1TestDUFuncPickling.test_restricted.<locals>.ident  r  r   r   )r   r  r   r  s     r   test_restrictedz"TestDUFuncPickling.test_restricted  sF    	&'	(	(	 	 
)	(	 	

5e
,,,,,r   N)rp   rq   rr   r  r  r  r   r   r   r  r    sA        . . .$9 9 9- - - - -r   r  __main__)!r  r  re   rT  numpyr2   numbar   r   numba.tests.supportr   r   numba.core.errorsr   r   r	   r[  numba.np.ufuncr
   numba.np.numpy_supportr   r   r   r   r   r   r   rt   r^  r  r  rp   mainr   r   r   <module>r     sS              ! ! ! ! ! ! ! ! 9 9 9 9 9 9 9 9@ @ @ @ @ @ @ @ @ @  ! ! ! ! ! ! - - - - - -        ! ! !cI cI cI cI cI("3 cI cI cIZ~M ~M ~M ~M ~M8 ~M ~M ~MBd. d. d. d. d. d. d. d.NC C C C Cx C C CL- - - - -(*; - - -D zHMOOOOO r   