U
    iâËdC ã                   @   sÌ  d dl Z d dlZd dlZ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mZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlm Z  e!j"dkZ#ej$ %d¡Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+dd„ Z,G dd„ deƒZ-G dd„ de-ƒZ.G dd„ de.eƒZ/G d d!„ d!e-eƒZ0G d"d#„ d#eƒZ1G d$d%„ d%eƒZ2G d&d'„ d'eƒZ3G d(d)„ d)e3ƒZ4e4 5¡  G d*d+„ d+e3ƒZ6e6 5¡  G d,d-„ d-e3ƒZ7e7 5¡  G d.d/„ d/e3ƒZ8e8 5¡  G d0d1„ d1e3ƒZ9e9 5¡  G d2d3„ d3e3ƒZ:e: 5¡  G d4d5„ d5e3ƒZ;e; 5¡  G d6d7„ d7e3ƒZ<e< 5¡  G d8d9„ d9e3ƒZ=e= 5¡  G d:d;„ d;e3ƒZ>e> 5¡  G d<d=„ d=eƒZ?G d>d?„ d?eƒZ@G d@dA„ dAeƒZAG dBdC„ dCeƒZBeCdDk�rÈe D¡  dS )Eé    N)ÚguvectorizeÚnjitÚtypeofÚ	vectorize)Útypes)Ú
from_dtype)ÚLoweringErrorÚTypingError)ÚTestCaseÚMemoryLeakMixin)Úsupported_ufuncs)Únumpy_support)Ú
cpu_target)ÚBaseContext)Úufunc_dbé   Úwin32c                    s   t  ˆ ¡‡ fdd„ƒ}dS )zŠAn 'expectedFailure' like decorator that only expects compilation errors
    caused by unimplemented functions that fail in no-python modec                     s<   zˆ | |Ž W n" t k
r0   t t ¡ ¡‚Y nX tj‚d S ©N)r	   ÚunittestZ_ExpectedFailureÚsysÚexc_infoZ_UnexpectedSuccess)ÚargsÚkwargs©Úfunc© úP/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_ufuncs.pyÚwrapper   s
    z_unimplemented.<locals>.wrapperN)Ú	functoolsÚwraps)r   r   r   r   r   Ú_unimplemented   s    r    c                 C   sT   i }d  dd„ t| jƒD ƒ¡}d || j¡}t|tƒ |ƒ |d }d | j¡|_|S )Nú,c                 S   s   g | ]}d   |¡‘qS )za{0})Úformat©Ú.0Úir   r   r   Ú
<listcomp>(   s     z'_make_ufunc_usecase.<locals>.<listcomp>zdef fn({0}):
    np.{1}({0})Úfnz{0}_usecase)ÚjoinÚrangeÚnargsr"   Ú__name__ÚexecÚglobals)ÚufuncÚldictZarg_strZfunc_strr'   r   r   r   Ú_make_ufunc_usecase&   s    r0   c                 C   s4   i }t d | ¡tƒ |ƒ |d }d t| ƒ¡|_|S )Nzdef fn(x):
    return {0}(x)r'   úusecase_{0}©r,   r"   r-   Úhashr+   ©Úufunc_opr/   r'   r   r   r   Ú_make_unary_ufunc_op_usecase0   s
    r6   c                 C   s4   i }t d | ¡tƒ |ƒ |d }d t| ƒ¡|_|S )Nzdef fn(x,y):
    return x{0}yr'   r1   r2   r4   r   r   r   Ú_make_binary_ufunc_op_usecase8   s
    r7   c                    sP   t ˆ tƒr<i }td ˆ ¡tƒ |ƒ |d }d tˆ ƒ¡|_n‡ fdd„}|}|S )z”Generates a function to be compiled that performs an inplace operation

    ufunc_op can be a string like '+=' or a function like operator.iadd
    zdef fn(x,y):
    x{0}yr'   r1   c                    s   ˆ | |ƒ d S r   r   ©ÚxÚy©r5   r   r   Ú
inplace_opK   s    z2_make_inplace_ufunc_op_usecase.<locals>.inplace_op)Ú
isinstanceÚstrr,   r"   r-   r3   r+   )r5   r/   r'   r<   r   r;   r   Ú_make_inplace_ufunc_op_usecase@   s    
r?   c                 C   s   dd„ t | |ƒD ƒS )z5Convert python values into numpy scalar objects.
    c                 S   s$   g | ]\}}t  t|ƒ¡ |¡‘qS r   )ÚnpÚdtyper>   Útype)r$   ÚtyÚvalr   r   r   r&   T   s     z#_as_dtype_value.<locals>.<listcomp>)Úzip)Útyargsr   r   r   r   Ú_as_dtype_valueQ   s    rG   c                       s<   e Zd Z‡ fdd„Zejdd�d
dd„ƒZddd	„Z‡  ZS )ÚBaseUFuncTestc                    sH  t t| ƒ ¡  t d¡tjft d¡tjft d¡tjft d¡tjft d¡tjft d¡tjft d¡tjft d¡tjft d¡tjft d¡tjft 	d¡tj	ft 	d¡tj	ft 	d¡tj	ft 
d¡tj
ft 
d¡tj
ft 
d¡tj
ftjddgdd�t tjdd	¡ftjddgd
d�t tjdd	¡ftjdddgdd�t tjdd	¡ftjdddgdd�t tjdd	¡ftjdddgdd�t tj	dd	¡ftjdddgdd�t tj
dd	¡ftjddgtjd�t tjdd	¡ftjddgtjd�t tjdd	¡ftjddgtjd�t tjdd	¡ftjddgtjd�t tjdd	¡fg| _d S )Nr   é   éÿÿÿÿç      à¿ç        ç      à?Úu4©rA   ÚCÚu8Úi4Úi8Úf4Úf8)ÚsuperrH   ÚsetUpr@   Úuint32r   Úint32Úuint64Úint64Úfloat32Úfloat64ÚarrayÚArrayÚint8Úint16Zuint8Zuint16Úinputs©Úself©Ú	__class__r   r   rW   Y   sD      ""ÿÿ"""ÿàzBaseUFuncTest.setUpN)ÚmaxsizeFc                 C   s   t ||dd�|ƒS )NT)Z_nrtZno_rewrites)r   )rd   Úpyfuncr   Únrtr   r   r   Ú_compile   s    zBaseUFuncTest._compilec                 C   s¤   |}t |tjƒr|j}|j}nd}|tjkrP|r@t ||d¡}q t ||d¡}nP|tjkr~|rnt ||d¡}q t ||d¡}n"|r’t ||d¡}nt ||d¡}|S )NrI   rP   )r=   r   r_   ÚndimrA   Zsigned_domainZunsigned_domain)rd   Ú
input_typeÚint_output_typeÚfloat_output_typerC   rk   Úoutput_typer   r   r   Ú_determine_output_type…   s"    

z$BaseUFuncTest._determine_output_type)F)NN)	r+   Ú
__module__Ú__qualname__rW   r   Ú	lru_cacherj   rp   Ú__classcell__r   r   re   r   rH   W   s   &
  ÿrH   c                   @   s*   e Zd Zdd„ Zg g ddddfdd„ZdS )ÚBasicUFuncTestc                 C   s   t |ƒS r   )r0   ©rd   r.   r   r   r   r0   ¡   s    z"BasicUFuncTest._make_ufunc_usecaseNZifcFc                    s"  |   t¡ |  |¡}t| jƒ| }	|	D �]ô}
|
d }|
d }t|tƒ}|rP|‰ n|f|j ‰ ||krfq&|r~t 	ˆ d dk ¡r~q&ˆ d j
j|kr�q&|  |||¡}|f|j }|f|j }|| }|  ||¡}tˆ d tjƒ�r‡ fdd„|D ƒ}‡ fdd„|D ƒ}ndd„ |D ƒ}dd„ |D ƒ}d}tjd	d
��P}t d¡ |ˆ |žŽ  d}|D ]*}t|jtƒ�rNt|jƒ |¡�rNd	}�qNW 5 Q R X |ˆ |žŽ  t||ƒD ]€\}}d dddddddg¡ |j|||||j
|¡}ztjj||d|d� W n. tk
�r   |�rtd|
||ƒ n‚ Y nX �qšq&d S )Nr   rI   c                    s$   g | ]}t jˆ d  j|jjd�‘qS ©r   rO   ©r@   ÚzerosÚshaperA   Úname©r$   Zout_ty©r   r   r   r&   Ì   s   þÿz3BasicUFuncTest.basic_ufunc_test.<locals>.<listcomp>c                    s$   g | ]}t jˆ d  j|jjd�‘qS rw   rx   r|   r}   r   r   r&   Ñ   s   ÿc                 S   s   g | ]}t jd |jjd�‘qS ©rI   rO   ©r@   ry   rA   r{   r|   r   r   r   r&   Ö   s   ÿc                 S   s   g | ]}t jd |jjd�‘qS r~   r   r|   r   r   r   r&   Ú   s   ÿFT)ÚrecordÚalwayszinvalid value encounteredÚ
zufunc '{0}' failedzinputs ({1}):z{2}zgot({3})z{4}zexpected ({5}):z{6}é   )ÚdecimalÚerr_msgz!Output mismatch for invalid input) Zreset_module_warningsr+   r0   Úlistrb   r=   ÚtupleÚninr@   ÚanyrA   Úkindrp   Únoutrj   ÚndarrayÚwarningsÚcatch_warningsÚsimplefilterÚ
issubclassÚcategoryÚRuntimeWarningr>   ÚmessageÚ
startswithrE   r(   r"   ÚtestingÚassert_array_almost_equalÚAssertionErrorÚprint)rd   r.   Úskip_inputsÚadditional_inputsrm   rn   ÚkindsÚpositive_onlyrh   rb   Úinput_tupleÚinput_operandrl   Úis_tuplero   Zinput_typesÚoutput_typesZargtysÚcfuncÚresultsÚexpectedZinvalid_flagZwarnlistZwarnmsgZthiswarnZ
expected_iZresult_iÚmsgr   r}   r   Úbasic_ufunc_test¤   s¢    



  ÿ
ý
þþþ
ÿ   ý   ù ý
  ÿzBasicUFuncTest.basic_ufunc_test)r+   rq   rr   r0   r¥   r   r   r   r   ru       s     þru   c                   @   sü  e Z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d„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zejfd&d'„Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Z d:d;„ Z!d<d=„ Z"d>d?„ Z#d@dA„ Z$dBdC„ Z%dDdE„ Z&dFdG„ Z'dHdI„ Z(dJdK„ Z)dLdM„ Z*dNdO„ Z+dPdQ„ Z,dRdS„ Z-dTdU„ Z.dVdW„ Z/dXdY„ Z0dZd[„ Z1d\d]„ Z2d^d_„ Z3d`da„ Z4dbdc„ Z5ddde„ Z6dfdg„ Z7dhdi„ Z8djdk„ Z9dldm„ Z:dndo„ Z;dpdq„ Z<drds„ Z=dtdu„ Z>dvdw„ Z?dxdy„ Z@dzd{„ ZAd|d}„ 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¡„ ZTeUd¢d£„ ƒZVeUd¤d¥„ ƒZWd¦d§„ ZXd¨d©„ ZYdªd«„ ZZd¬d­„ Z[d®d¯„ Z\d°d±„ Z]d²d³„ Z^d´dµ„ Z_d¶d·„ Z`d¸d¹„ ZadS )»Ú
TestUFuncsNc                 C   s:   t jt jt  t jdd¡t  t jdd¡g}| j||d� d S ©NrI   rP   )r™   )r   r\   r]   r_   r¥   )rd   r{   r™   r   r   r   Úbasic_int_ufunc_test  s    üzTestUFuncs.basic_int_ufunc_testc                 C   s   |   tj¡ d S r   )r¥   r@   Úaddrc   r   r   r   Útest_add_ufunc  s    zTestUFuncs.test_add_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úsubtractrc   r   r   r   Útest_subtract_ufunc  s    zTestUFuncs.test_subtract_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úmultiplyrc   r   r   r   Útest_multiply_ufunc  s    zTestUFuncs.test_multiply_ufuncc                 C   s   d }t j}| jtj|d� d S ©N©rm   )r   r]   r¥   r@   Údivide©rd   Zint_out_typer   r   r   Útest_divide_ufunc  s
    ÿzTestUFuncs.test_divide_ufuncc                 C   s   | j tjdd� d S ©NÚf©r›   )r¥   r@   Z	logaddexprc   r   r   r   Útest_logaddexp_ufunc#  s    zTestUFuncs.test_logaddexp_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Ú
logaddexp2rc   r   r   r   Útest_logaddexp2_ufunc&  s    z TestUFuncs.test_logaddexp2_ufuncc                 C   s   | j tjtjd� d S r¯   )r¥   r@   Útrue_divider   r]   rc   r   r   r   Útest_true_divide_ufunc)  s    ÿz!TestUFuncs.test_true_divide_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úfloor_dividerc   r   r   r   Útest_floor_divide_ufunc-  s    z"TestUFuncs.test_floor_divide_ufuncc                 C   s.   t  t jdd¡t jg}| jtjt j|d� d S )NrI   rP   )rm   r™   )r   r_   rX   r¥   r@   Únegativer[   )rd   r™   r   r   r   Útest_negative_ufunc0  s    ÿzTestUFuncs.test_negative_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Zpositiverc   r   r   r   Útest_positive_ufunc7  s    zTestUFuncs.test_positive_ufuncc                 C   s   | j tjdd� d S )NT)rœ   )r¥   r@   Úpowerrc   r   r   r   Útest_power_ufunc:  s    zTestUFuncs.test_power_ufuncc                 C   s   | j tjdd� d S )NÚfcr¶   )r¥   r@   Zfloat_powerrc   r   r   r   Útest_float_power_ufunc=  s    z!TestUFuncs.test_float_power_ufuncc                 C   s   | j tjdd� d S ©NÚiur¶   )r¥   r@   Úgcdrc   r   r   r   Útest_gcd_ufunc@  s    zTestUFuncs.test_gcd_ufuncc                 C   s   | j tjdd� d S rÅ   )r¥   r@   Zlcmrc   r   r   r   Útest_lcm_ufuncC  s    zTestUFuncs.test_lcm_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Ú	remainderrc   r   r   r   Útest_remainder_ufuncF  s    zTestUFuncs.test_remainder_ufuncc                 C   s<   t  t  t j¡j¡t  d¡ftjfg}| jt jd|d� d S )Né   Zifcu©r›   rš   )r@   rZ   ÚiinfoÚmaxr   r¥   Úmod)rd   rš   r   r   r   Útest_mod_ufuncI  s
    "ÿ
ÿzTestUFuncs.test_mod_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úfmodrc   r   r   r   Útest_fmod_ufuncP  s    zTestUFuncs.test_fmod_ufuncc                 C   sv   t  t  t j¡j¡tjft  t  t j¡j¡tjft  t  t j¡j¡tjft  	t  t j	¡j¡tj	fg}| j
||d� d S )N)rš   )r@   rX   rÎ   rÏ   r   rZ   r\   ZfinfoÚminr]   r¥   )rd   r.   rš   r   r   r   Útest_abs_ufuncS  s    üÿzTestUFuncs.test_abs_ufuncc                 C   s   | j tjd� d S )N)r.   )rÕ   r@   Úabsoluterc   r   r   r   Útest_absolute_ufunc]  s    zTestUFuncs.test_absolute_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úfabsrc   r   r   r   Útest_fabs_ufunc`  s    zTestUFuncs.test_fabs_ufuncc                 C   s   | j tjdd� d S ©NÚcfr¶   )r¥   r@   Zrintrc   r   r   r   Útest_rint_ufuncc  s    zTestUFuncs.test_rint_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úsignrc   r   r   r   Útest_sign_ufuncf  s    zTestUFuncs.test_sign_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Zconjrc   r   r   r   Útest_conj_ufunci  s    zTestUFuncs.test_conj_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úexprc   r   r   r   Útest_exp_ufuncl  s    zTestUFuncs.test_exp_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Zexp2rc   r   r   r   Útest_exp2_ufunco  s    zTestUFuncs.test_exp2_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úlogrc   r   r   r   Útest_log_ufuncr  s    zTestUFuncs.test_log_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úlog2rc   r   r   r   Útest_log2_ufuncu  s    zTestUFuncs.test_log2_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úlog10rc   r   r   r   Útest_log10_ufuncx  s    zTestUFuncs.test_log10_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úexpm1rc   r   r   r   Útest_expm1_ufunc{  s    zTestUFuncs.test_expm1_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úlog1prc   r   r   r   Útest_log1p_ufunc~  s    zTestUFuncs.test_log1p_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úsqrtrc   r   r   r   Útest_sqrt_ufunc�  s    zTestUFuncs.test_sqrt_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Zsquarerc   r   r   r   Útest_square_ufunc„  s    zTestUFuncs.test_square_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úcbrtrc   r   r   r   Útest_cbrt_ufunc‡  s    zTestUFuncs.test_cbrt_ufuncc                 C   s`   t  t jdd¡t jt  t jdd¡t jt  t jdd¡t jt  t jdd¡t jg}| jtj|d� d S r§   )	r   r_   rX   rY   rZ   r[   r¥   r@   Ú
reciprocal©rd   Zto_skipr   r   r   Útest_reciprocal_ufuncŠ  s       ýz TestUFuncs.test_reciprocal_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Ú	conjugaterc   r   r   r   Útest_conjugate_ufunc”  s    zTestUFuncs.test_conjugate_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úsinrc   r   r   r   Útest_sin_ufuncš  s    zTestUFuncs.test_sin_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úcosrc   r   r   r   Útest_cos_ufunc�  s    zTestUFuncs.test_cos_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Útanrc   r   r   r   Útest_tan_ufunc   s    zTestUFuncs.test_tan_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úarcsinrc   r   r   r   Útest_arcsin_ufunc£  s    zTestUFuncs.test_arcsin_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úarccosrc   r   r   r   Útest_arccos_ufunc¦  s    zTestUFuncs.test_arccos_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Zarctanrc   r   r   r   Útest_arctan_ufunc©  s    zTestUFuncs.test_arctan_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Zarctan2rc   r   r   r   Útest_arctan2_ufunc¬  s    zTestUFuncs.test_arctan2_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úhypotrc   r   r   r   Útest_hypot_ufunc¯  s    zTestUFuncs.test_hypot_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úsinhrc   r   r   r   Útest_sinh_ufunc²  s    zTestUFuncs.test_sinh_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Úcoshrc   r   r   r   Útest_cosh_ufuncµ  s    zTestUFuncs.test_cosh_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Útanhrc   r   r   r   Útest_tanh_ufunc¸  s    zTestUFuncs.test_tanh_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Zarcsinhrc   r   r   r   Útest_arcsinh_ufunc»  s    zTestUFuncs.test_arcsinh_ufuncc                 C   s   | j tjdd� d S rÚ   )r¥   r@   Zarccoshrc   r   r   r   Útest_arccosh_ufunc¾  s    zTestUFuncs.test_arccosh_ufuncc                 C   sb   t  t jdd¡t jt  t jdd¡t jt  t jdd¡t jt  t jdd¡t jg}| jtj|dd� d S )NrI   rP   rÛ   )r™   r›   )	r   r_   rX   rY   rZ   r[   r¥   r@   Zarctanhró   r   r   r   Útest_arctanh_ufuncÁ  s    	   ýzTestUFuncs.test_arctanh_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Zdeg2radrc   r   r   r   Útest_deg2rad_ufuncÑ  s    zTestUFuncs.test_deg2rad_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Zrad2degrc   r   r   r   Útest_rad2deg_ufuncÔ  s    zTestUFuncs.test_rad2deg_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Údegreesrc   r   r   r   Útest_degrees_ufunc×  s    zTestUFuncs.test_degrees_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úradiansrc   r   r   r   Útest_radians_ufuncÚ  s    zTestUFuncs.test_radians_ufuncc                 C   s   |   tj¡ d S r   )r¨   r@   Zbitwise_andrc   r   r   r   Útest_bitwise_and_ufuncà  s    z!TestUFuncs.test_bitwise_and_ufuncc                 C   s   |   tj¡ d S r   )r¨   r@   Z
bitwise_orrc   r   r   r   Útest_bitwise_or_ufuncã  s    z TestUFuncs.test_bitwise_or_ufuncc                 C   s   |   tj¡ d S r   )r¨   r@   Zbitwise_xorrc   r   r   r   Útest_bitwise_xor_ufuncæ  s    z!TestUFuncs.test_bitwise_xor_ufuncc                 C   s   |   tj¡ d S r   )r¨   r@   Úinvertrc   r   r   r   Útest_invert_ufuncé  s    zTestUFuncs.test_invert_ufuncc                 C   s   |   tj¡ d S r   )r¨   r@   Zbitwise_notrc   r   r   r   Útest_bitwise_not_ufuncì  s    z!TestUFuncs.test_bitwise_not_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úgreaterrc   r   r   r   Útest_greater_ufuncû  s    zTestUFuncs.test_greater_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úgreater_equalrc   r   r   r   Útest_greater_equal_ufuncþ  s    z#TestUFuncs.test_greater_equal_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úlessrc   r   r   r   Útest_less_ufunc  s    zTestUFuncs.test_less_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Ú
less_equalrc   r   r   r   Útest_less_equal_ufunc  s    z TestUFuncs.test_less_equal_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Ú	not_equalrc   r   r   r   Útest_not_equal_ufunc  s    zTestUFuncs.test_not_equal_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úequalrc   r   r   r   Útest_equal_ufunc
  s    zTestUFuncs.test_equal_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úlogical_andrc   r   r   r   Útest_logical_and_ufunc  s    z!TestUFuncs.test_logical_and_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Ú
logical_orrc   r   r   r   Útest_logical_or_ufunc  s    z TestUFuncs.test_logical_or_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úlogical_xorrc   r   r   r   Útest_logical_xor_ufunc  s    z!TestUFuncs.test_logical_xor_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Zlogical_notrc   r   r   r   Útest_logical_not_ufunc  s    z!TestUFuncs.test_logical_not_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úmaximumrc   r   r   r   Útest_maximum_ufunc  s    zTestUFuncs.test_maximum_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úminimumrc   r   r   r   Útest_minimum_ufunc  s    zTestUFuncs.test_minimum_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Zfmaxrc   r   r   r   Útest_fmax_ufunc  s    zTestUFuncs.test_fmax_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Zfminrc   r   r   r   Útest_fmin_ufunc"  s    zTestUFuncs.test_fmin_ufuncc                 C   s&   t jddgt jd�t tjdd¡fgS )NTFrO   rI   rP   )r@   r^   Úbool_r   r_   rc   r   r   r   Úbool_additional_inputs(  s    ÿÿz!TestUFuncs.bool_additional_inputsc                 C   s   | j tjd|  ¡ d� d S ©NZifcbrÍ   )r¥   r@   Úisfiniter4  rc   r   r   r   Útest_isfinite_ufunc.  s
     þzTestUFuncs.test_isfinite_ufuncc                 C   s   | j tjd|  ¡ d� d S r5  )r¥   r@   Úisinfr4  rc   r   r   r   Útest_isinf_ufunc4  s
     þzTestUFuncs.test_isinf_ufuncc                 C   s   | j tjd|  ¡ d� d S r5  )r¥   r@   Úisnanr4  rc   r   r   r   Útest_isnan_ufunc:  s
     þzTestUFuncs.test_isnan_ufuncc                 C   s   |   tj¡ d S r   )r¥   r@   Úsignbitrc   r   r   r   Útest_signbit_ufunc@  s    zTestUFuncs.test_signbit_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úcopysignrc   r   r   r   Útest_copysign_ufuncC  s    zTestUFuncs.test_copysign_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Z	nextafterrc   r   r   r   Útest_nextafter_ufuncF  s    zTestUFuncs.test_nextafter_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úmodfrc   r   r   r   Útest_modf_ufuncI  s    zTestUFuncs.test_modf_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úfrexprc   r   r   r   Útest_frexp_ufuncQ  s    zTestUFuncs.test_frexp_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úfloorrc   r   r   r   Útest_floor_ufuncU  s    zTestUFuncs.test_floor_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Úceilrc   r   r   r   Útest_ceil_ufuncX  s    zTestUFuncs.test_ceil_ufuncc                 C   s   | j tjdd� d S r´   )r¥   r@   Útruncrc   r   r   r   Útest_trunc_ufunc[  s    zTestUFuncs.test_trunc_ufuncc                 C   sB   t jt jt j gt jd�t tjdd¡fg}| jt jd|d� d S )NrO   rI   rP   rµ   rÍ   )r@   r^   Úinfr]   r   r_   r¥   Úspacing)rd   Ú
additionalr   r   r   Útest_spacing_ufunc^  s    ÿ
ÿzTestUFuncs.test_spacing_ufuncc                 C   sÐ  |j }t|ƒ}dtjfdtjfdtjftjddgdd�t tjdd¡ftjddgdd�t tjdd¡ftjd	dgd
d�t tjdd¡fg}|}t tjdd¡t tjdd¡g}|}t	 
|||¡D �]}|\}}	}
|d }|d }|	d }|	d }|dk�r&|t tjdd¡ksÀ|t tjdd¡k�r&qÀ|dk�rf|t tjdd¡k�rf|tjk�rft tjdd¡�rfqÀ|dk�r¦|t tjdd¡k�r¦|tjk�r¦t tjdd¡�r¦qÀt|tjƒ�sÂt|tjƒ�rÒt|
tjƒ�sÒqÀ|||
f}|  ||¡}t|tjƒ�r tj|j|
jjd�}tj|j|
jjd�}n\t|tjƒ�rXtj|j|
jjd�}tj|j|
jjd�}n$tjd|
jjd�}tjd|
jjd�}||||ƒ ||||ƒ t|
d|
ƒ}|tjtjfk�r¶dnd}| j|||d� qÀd S )NrI   rJ   rM   r   rQ   rO   rP   rS   rK   rU   r±   r«   rA   ÚsingleÚdouble)Úprec)r+   r0   r   rZ   r[   r]   r@   r^   r_   Ú	itertoolsÚproductrX   r=   rj   rŒ   ry   ÚsizerA   r{   Úgetattrr\   Ú	complex64ÚassertPreciseEqual)rd   r.   Z
ufunc_nameZinputs1Zinputs2r    rh   ÚvalsZinput1Zinput2ro   Zinput1_operandÚinput1_typeZinput2_operandÚinput2_typer   r¡   Úresultr£   Zscalar_typerQ  r   r   r   Úbinary_ufunc_mixed_types_testi  s˜      ÿù
ÿ

ÿþ
ÿþý
ÿþý
ÿ
þ
ÿÿÿÿÿþz(TestUFuncs.binary_ufunc_mixed_types_testc                 C   sî  t tjƒ}tjddd�tjddd� dd¡tjddd� dd¡tjddd� dd¡tjddd� dd¡tjddd� dd¡g}tjddd� dd¡tjddd� dd¡tjddd� dd¡tjddd� ddd¡tjddd� ddd¡tjddd� ddd¡g}t||ƒD ]v\}}t tj	|j
d¡}t tj|j
d¡}||f}|  ||¡}	tj|j|jd�}
t ||
¡ |	||ƒ |  ||
¡ �q
t tjƒ}tjddd�tjddd� dd¡tjddd� ddd¡tjddd� dd¡tjddd� dd¡tjddd� ddd¡tjddd� ddd¡tjddd� ddd¡tjddd� ddd¡g	}|}t ||¡D ]’\}}t tj	|j
d¡}t tj	|j
d¡}t tj	t|j
|j
ƒd¡}|||f}|  ||¡}	t ||¡}
tj|
jdd�}|	|||ƒ |  ||
¡ �qVd S )	Né   rQ   rO   rI   é	   rS   é   rP   )r0   r@   r¾   ÚarangeÚreshapery   rE   r   r_   rZ   rk   r[   rj   rz   rA   rW  r©   rR  rS  rÏ   )rd   rh   Zinput_operandsZoutput_operandsr9   r[  rl   ro   r   r¡   r£   Úinput1_operandsÚinput2_operandsr:   rY  rZ  r   r   r   Útest_broadcasting·  s\    
ú	ú

÷
zTestUFuncs.test_broadcastingc                 C   sF   t  t jdd¡}||f}t||fƒdd„ ƒ}|  |j| jj|¡ d S )NrI   rP   c                 S   s   t  | |¡S r   ©r@   r©   ©Úa0Úa1r   r   r   Úmyadd   s    z2TestUFuncs.test_implicit_output_npm.<locals>.myadd)r   r_   rZ   r   ÚassertEqualÚ	overloadsÚ	signatureÚreturn_type)rd   Zarr_tyÚsigri  r   r   r   Útest_implicit_output_npmú  s
    

z#TestUFuncs.test_implicit_output_npmc                 C   s@  dd„ }t jddd�t jddd� dd¡t jddd� ddd¡t jddd� dd¡t jddd� dd¡t jddd� ddd¡t jddd� ddd¡t jddd� ddd¡t jddd� ddd¡g	}|}t ||¡D ]h\}}t tj|jd	¡}t tj|jd	¡}||f}| j	||d
d�}	t  
||¡}
|	||ƒ}t j |
|¡ qÒd S )Nc                 S   s   t  | |¡S r   re  rf  r   r   r   rh     s    zATestUFuncs.test_broadcast_implicit_output_npm_nrt.<locals>.pyfuncr]  rQ   rO   r^  r_  rI   rP   T©ri   )r@   r`  ra  rR  rS  r   r_   rZ   rk   rj   r©   r•   Úassert_array_equal)rd   rh   rb  rc  r9   r:   rY  rZ  r   r¡   r£   r[  r   r   r   Ú&test_broadcast_implicit_output_npm_nrt  s(    ÷
z1TestUFuncs.test_broadcast_implicit_output_npm_nrtc                 C   sd  dd„ }t  ddd¡ dd¡}t j|dd	�}| dd¡jd }t|ƒ}|jjrX|jd
ks\t	‚t|ƒ}|jj
rv|jdkszt	‚t|ƒ}|jdks�t	‚|jjrœt	‚|jj
r¨t	‚tt |||gd¡ƒ}|||fg7 }|||fg7 }|||fg7 }|D ]r\}	}
t|	ƒt|
ƒf}| j||dd�}||	|
ƒ}||	|
ƒ}|  |jj|jj¡ |  |jj
|jj
¡ t j ||¡ qìd S )Nc                 S   s   t  | |¡S r   re  rf  r   r   r   rh   $  s    z=TestUFuncs.test_implicit_output_layout_binary.<locals>.pyfuncr   rI   é   r   rƒ   ÚF©ÚorderrP   ÚAé   Trp  )r@   Úlinspacera  r^   ÚTr   ÚflagsÚc_contiguousÚlayoutr—   Úf_contiguousr†   rR  Úpermutationsrj   rj  r•   rq  )rd   rh   ÚXÚYÚZÚXtyÚYtyÚZtyZ	testcasesÚarg0Zarg1r   r¡   r£   r[  r   r   r   Ú"test_implicit_output_layout_binary#  s8    


ÿ
ÿz-TestUFuncs.test_implicit_output_layout_binaryc                 C   s  dd„ }t  ddd¡ dd¡}t j|dd	�}| dd¡jd }t|ƒ}|jjrX|jd
ks\t	‚t|ƒ}|jj
rv|jdkszt	‚t|ƒ}|jdks�t	‚|jjrœt	‚|jj
r¨t	‚|||fD ]d}t|ƒf}	| j||	dd�}
||ƒ}|
|ƒ}|  |jj|jj¡ |  |jj
|jj
¡ t j ||¡ q²d S )Nc                 S   s
   t  | ¡S r   ©r@   rí   )rg  r   r   r   rh   I  s    z<TestUFuncs.test_implicit_output_layout_unary.<locals>.pyfuncr   rI   rs  r   rƒ   rt  ru  rP   rw  Trp  )r@   ry  ra  r^   rz  r   r{  r|  r}  r—   r~  rj   rj  r•   rq  )rd   rh   r€  r�  r‚  rƒ  r„  r…  r†  r   r¡   r£   r[  r   r   r   Ú!test_implicit_output_layout_unaryH  s0    

ÿ
ÿz,TestUFuncs.test_implicit_output_layout_unary)N)br+   rq   rr   r¨   rª   r¬   r®   r³   r·   r¹   r»   r½   r¿   rÀ   rÂ   rÄ   rÈ   rÉ   rË   rÑ   rÓ   r@   ÚabsrÕ   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#  r%  r'  r)  r+  r,  r.  r0  r1  r2  r4  r7  r9  r;  r=  r?  r@  r    rB  rD  rF  rH  rJ  rN  r\  rd  ro  rr  r‡  r‰  r   r   r   r   r¦     s¼   
	



NC%r¦   c                   @   s†  e Zd Zdd„ Zdg g ddfdd„Zdg g ddd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d*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Z d@dA„ Z!dBdC„ Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dJdK„ Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,dXdY„ Z-dZd[„ Z.dS )\ÚTestArrayOperatorsc                 C   s&   |   |jj|jj¡ tj ||¡ d S r   )rj  rA   rŠ   r@   r•   r–   )rd   r£   Úgotr   r   r   Ú_check_resultsk  s    z!TestArrayOperators._check_resultsTNc                 C   sz   t |ƒ}t| jƒ}| |¡ |}	|D ]P}
|
\}}||ks$t|tjƒsFq$| j|	|f|d�}|	|ƒ}||ƒ}|  ||¡ q$d S )Nrp  )	r6   r†   rb   Úextendr=   r   r_   rj   r�  )rd   Úoperatorri   r™   rš   rm   rn   Úoperator_funcrb   rh   r�   rž   rl   r¡   r£   rŒ  r   r   r   Úunary_op_testo  s    


ÿz TestArrayOperators.unary_op_testFc                 C   s  t |ƒ}t| jƒ}	|	 |¡ |}
tj d¡}|	D ]Î}|\}}t t	|d|ƒ¡}|}||kr\q0|rrtj
d|d�d }t|tjƒrœ|}|}|rÆt ||k ¡rÆq0n*| ddd¡ |¡}t|ƒ}|rÆ||k rÆq0||f}| j|
||d�}|
||ƒ}|||ƒ}|  ||¡ q0d S )NrI   rA   rO   r   éd   é
   rp  )r7   r†   rb   rŽ  r@   ÚrandomZRandomStater   Zas_dtyperU  ry   r=   r   r_   r‰   ÚuniformZastyper   rj   r�  )rd   r�  ri   r™   rš   rm   rn   Úpositive_rhsr�  rb   rh   Zrandom_stater�   Zinput_operand1rl   Zinput_dtypeZinput_type1ÚzeroZinput_operand0Zinput_type0r   r¡   r£   rŒ  r   r   r   Úbinary_op_test‚  s>    


ÿÿ

z!TestArrayOperators.binary_op_testc                 C   s0   dt jfdt jft ddg¡t  t jdd¡fgS )NTFrI   rP   )r   Úbooleanr@   r^   r_   rc   r   r   r   Úbitwise_additional_inputs¬  s    ýz,TestArrayOperators.bitwise_additional_inputsc              	   O   sD   |  dg ¡}|tjtjt tjdd¡t tjdd¡g7 }| j||ŽS )Nr™   rI   rP   )Ú
setdefaultr   r\   r]   r_   r˜  )rd   r   Úkwsr™   r   r   r   Úbinary_int_op_testµ  s     ýz%TestArrayOperators.binary_int_op_testc                 O   s$   |  dg ¡}||  ¡ 7 }| j||ŽS )Nrš   )r›  rš  r�  )rd   r   rœ  rš   r   r   r   Úbinary_bitwise_op_test¾  s    z)TestArrayOperators.binary_bitwise_op_testc                    s¸   t |ƒ}|}‡ fdd„|D ƒ}‡fdd„ˆD ƒ}	‡fdd„ˆD ƒ}
|	|
 }t ||¡D ]\\}}t|ƒ}t|ƒ}||f}|  ||¡}| ¡ }|||ƒ | ¡ }|||ƒ |  ||¡ qVd S )Nc                    s   g | ]}t jˆ |d �‘qS ©rO   ©r@   r^   ©r$   rA   )Ú
lhs_valuesr   r   r&   Ê  s   ÿz6TestArrayOperators.inplace_op_test.<locals>.<listcomp>c                    s   g | ]}t jˆ |d �‘qS rŸ  r   r¡  )Ú
rhs_valuesr   r   r&   Í  s   ÿc                    s   g | ]}ˆ D ]}||ƒ‘qqS r   r   )r$   ÚvrA   )Ú
rhs_dtypesr   r   r&   Ï  s       )r?   rR  rS  r   rj   ÚcopyrW  )rd   r�  r¢  r£  Z
lhs_dtypesr¥  r�  rh   Z
lhs_inputsZ
rhs_arraysZrhs_scalarsZ
rhs_inputsÚlhsÚrhsZlhs_typeZrhs_typer   r¡   r£   rŒ  r   )r¢  r¥  r£  r   Úinplace_op_testÃ  s(    
ÿ
ÿ

z"TestArrayOperators.inplace_op_testc              	   C   s&   |   |||tjtjftjtjtjf¡S r   )r©  r@   r\   r]   r[   ©rd   r�  r¢  r£  r   r   r   Úinplace_float_op_testÝ  s    

þz(TestArrayOperators.inplace_float_op_testc                 C   s*   |   |||tjtjtjftjtjf¡ d S r   )r©  r@   ra   rY   r[   rX   rª  r   r   r   Úinplace_int_op_testä  s    

þz&TestArrayOperators.inplace_int_op_testc                 C   s0   |   |||¡ |  |||tjftjtjf¡ d S r   )r¬  r©  r@   r3  rª  r   r   r   Úinplace_bitwise_op_testé  s
    
 
ÿz*TestArrayOperators.inplace_bitwise_op_testc                 C   s   |   d¡ d S ©Nú+©r‘  rc   r   r   r   Útest_unary_positive_array_opñ  s    z/TestArrayOperators.test_unary_positive_array_opc                 C   s   |   d¡ d S ©Nú-r°  rc   r   r   r   Útest_unary_negative_array_opô  s    z/TestArrayOperators.test_unary_negative_array_opc              
   C   s<   | j dtjtjt tjdd¡t tjdd¡g|  ¡ d� d S )Nú~rI   rP   )r™   rš   )r‘  r   r\   r]   r_   rš  rc   r   r   r   Útest_unary_invert_array_op÷  s    þüz-TestArrayOperators.test_unary_invert_array_opc                 C   s:   |   ddddgdddg¡ |   tjdddgdddg¡ d S )Nz+=rJ   ç      ø?r]  éûÿÿÿr   ç      @)r«  r�  Úiaddrc   r   r   r   Útest_inplace_add  s    z#TestArrayOperators.test_inplace_addc                 C   s:   |   ddddgdddg¡ |   tjdddgdddg¡ d S )Nz-=rJ   r·  r]  r¸  r   r¹  )r«  r�  Úisubrc   r   r   r   Útest_inplace_sub  s    z#TestArrayOperators.test_inplace_subc                 C   s:   |   ddddgdddg¡ |   tjdddgdddg¡ d S )Nz*=rJ   r·  r]  r¸  r   r¹  )r«  r�  Úimulrc   r   r   r   Útest_inplace_mul	  s    z#TestArrayOperators.test_inplace_mulc                 C   s:   |   ddddgdddg¡ |   tjdddgdddg¡ d S )Nz//=rJ   r·  r]  r¸  ç      ô?r¹  )r«  r�  Ú	ifloordivrc   r   r   r   Útest_inplace_floordiv  s    ÿz(TestArrayOperators.test_inplace_floordivc                 C   s:   |   ddddgdddg¡ |   tjdddgdddg¡ d S )	Nz/=rJ   r·  r]  r¸  r   r¹  rÀ  )r«  r�  Úitruedivrc   r   r   r   Útest_inplace_div  s    ÿz#TestArrayOperators.test_inplace_divc                 C   s:   |   ddddgdddg¡ |   tjdddgdddg¡ d S )Nz%=rJ   r·  r]  r¸  rx  r¹  )r«  r�  Úimodrc   r   r   r   Útest_inplace_remainder  s    z)TestArrayOperators.test_inplace_remainderc                 C   s:   |   ddddgdddg¡ |   tjdddgdddg¡ d S )Nz**=rJ   r·  r]  r¸  rx  r¹  )r«  r�  Úipowrc   r   r   r   Útest_inplace_pow  s    z#TestArrayOperators.test_inplace_powc              	   C   sJ   |   ddddddgdddd	d
g¡ |   tjdddddgdddd	d
g¡ d S )Nz&=r   rI   rx  r]  é3   é   rÌ   é*   éÿ   )r­  r�  Úiandrc   r   r   r   Útest_inplace_and  s    ÿÿz#TestArrayOperators.test_inplace_andc              	   C   sJ   |   ddddddgdddd	d
g¡ |   tjdddddgdddd	d
g¡ d S )Nz|=r   rI   rx  r]  rÉ  rÊ  rÌ   rË  rÌ  )r­  r�  Úiorrc   r   r   r   Útest_inplace_or%  s    ÿÿz"TestArrayOperators.test_inplace_orc              	   C   sJ   |   ddddddgdddd	d
g¡ |   tjdddddgdddd	d
g¡ d S )Nz^=r   rI   rx  r]  rÉ  rÊ  rÌ   rË  rÌ  )r­  r�  Úixorrc   r   r   r   Útest_inplace_xor+  s    ÿÿz#TestArrayOperators.test_inplace_xorc                 C   sB   |   dddddgddddg¡ |   tjddddgddddg¡ d S )	Nz<<=r   rƒ   éöÿÿÿéÍÿÿÿrI   r   é   )r¬  r�  Úilshiftrc   r   r   r   Útest_inplace_lshift1  s    
ÿz&TestArrayOperators.test_inplace_lshiftc                 C   sB   |   dddddgddddg¡ |   tjddddgddddg¡ d S )	Nz>>=r   rƒ   rÓ  rÔ  rI   r   rÕ  )r¬  r�  Úirshiftrc   r   r   r   Útest_inplace_rshift6  s    
ÿz&TestArrayOperators.test_inplace_rshiftc                 C   sœ   dd„ }t  d¡}||ƒ}|  |d |d ko<|d |d k¡ t  d¡}t|ƒ|ƒ}|  |d |d kox|d |d k¡ t j ||¡ t j ||¡ dS )z¶
        Verify that the unary positive operator copies values, and doesn't
        just alias to the input array (mirrors normal Numpy/Python
        interaction behavior).
        c                 S   s   | 
 }d| d< d|d< |S )Nr]  r   r   rI   r   )rh  Úa2r   r   r   rµ   B  s    z<TestArrayOperators.test_unary_positive_array_op_2.<locals>.fr“  r   rI   N)r@   ry   Ú
assertTruer   r•   rq  )rd   rµ   rh  rÚ  Úa3Za4r   r   r   Útest_unary_positive_array_op_2;  s    
&
&z1TestArrayOperators.test_unary_positive_array_op_2c                 C   s   |   d¡ d S r®  ©r˜  rc   r   r   r   Útest_add_array_opT  s    z$TestArrayOperators.test_add_array_opc                 C   s   |   d¡ d S r²  rÞ  rc   r   r   r   Útest_subtract_array_opW  s    z)TestArrayOperators.test_subtract_array_opc                 C   s   |   d¡ d S )NÚ*rÞ  rc   r   r   r   Útest_multiply_array_opZ  s    z)TestArrayOperators.test_multiply_array_opc                 C   s   d }t j}| jd|d� d S )Nú/r°   )r   r]   r˜  r²   r   r   r   Útest_divide_array_op]  s    z'TestArrayOperators.test_divide_array_opc                 C   sd  t  d¡tjft  d¡tjft  d¡tjft  d¡tjft  d¡tjft  d¡tjft  d¡tjft  d¡tjft  d¡tjft  d	¡tjft jdd
gdd�t 	tjdd¡ft jddgdd�t 	tjdd¡ft jdddgdd�t 	tjdd¡ft jdddgdd�t 	tjdd¡ft jddgdd�t 	tjdd¡ft jdd	gdd�t 	tjdd¡fg| _
|  d¡ d S )NrI   éþÿÿÿr   r   r¸  rK   r·  g      Àg      @rx  rN   rO   rP   r]  rQ   rJ   rƒ   rR   é   rS   rT   rU   z//)r@   rX   r   rY   rZ   r[   r\   r]   r^   r_   rb   r˜  rc   r   r   r   Útest_floor_divide_array_opb  s,      ""ÿÿìz-TestArrayOperators.test_floor_divide_array_opc                 C   s   |   d¡ d S )Nú%rÞ  rc   r   r   r   Útest_remainder_array_op~  s    z*TestArrayOperators.test_remainder_array_opc                 C   s   | j ddd� d S )Nz**T©r–  rÞ  rc   r   r   r   Útest_power_array_op�  s    z&TestArrayOperators.test_power_array_opc                 C   s   | j ddd� d S )Nz<<Trê  ©r�  rc   r   r   r   Útest_left_shift_array_op„  s    z+TestArrayOperators.test_left_shift_array_opc                 C   s   | j ddd� d S )Nz>>Trê  rì  rc   r   r   r   Útest_right_shift_array_op‡  s    z,TestArrayOperators.test_right_shift_array_opc                 C   s   |   d¡ d S )Nú&©rž  rc   r   r   r   Útest_bitwise_and_array_opŠ  s    z,TestArrayOperators.test_bitwise_and_array_opc                 C   s   |   d¡ d S )Nú|rð  rc   r   r   r   Útest_bitwise_or_array_op�  s    z+TestArrayOperators.test_bitwise_or_array_opc                 C   s   |   d¡ d S )Nú^rð  rc   r   r   r   Útest_bitwise_xor_array_op�  s    z,TestArrayOperators.test_bitwise_xor_array_opc                 C   s   |   d¡ d S )Nz==rÞ  rc   r   r   r   Útest_equal_array_op“  s    z&TestArrayOperators.test_equal_array_opc                 C   s   |   d¡ d S )Nú>rÞ  rc   r   r   r   Útest_greater_array_op–  s    z(TestArrayOperators.test_greater_array_opc                 C   s   |   d¡ d S )Nz>=rÞ  rc   r   r   r   Útest_greater_equal_array_op™  s    z.TestArrayOperators.test_greater_equal_array_opc                 C   s   |   d¡ d S )Nú<rÞ  rc   r   r   r   Útest_less_array_opœ  s    z%TestArrayOperators.test_less_array_opc                 C   s   |   d¡ d S )Nz<=rÞ  rc   r   r   r   Útest_less_equal_array_opŸ  s    z+TestArrayOperators.test_less_equal_array_opc                 C   s   |   d¡ d S )Nz!=rÞ  rc   r   r   r   Útest_not_equal_array_op¢  s    z*TestArrayOperators.test_not_equal_array_op)/r+   rq   rr   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   r   r   r   r‹  i  sn     þ
  ý
*		
r‹  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestScalarUFuncsa  check the machinery of ufuncs works when the result is an scalar.
    These are not exhaustive because:
    - the machinery to support this case is the same for all the functions of a
      given arity.
    - the result of the inner function itself is already tested in TestUFuncs
    c                 C   s2  t ||ƒD �] \}}t|ƒ|ƒ}||Ž }|t||ƒŽ }d ||¡}	ttjtjftjtjftjtjftjtjfgƒ}
||
kr„t	|ƒ}nLt
 |jt
j¡ržt	|ƒ}n2t
 |jt
j¡r¸t|ƒ}nt
 |jt
j¡rÐt|ƒ}||j| jjf }tdd„ |D ƒƒrüd}ntdd„ |D ƒƒ�rd}nd}| j|||	|d� q
d S )	Nzfor args {0} typed {1}c                 S   s   g | ]}|t jk‘qS r   )r   r\   ©r$   Útr   r   r   r&   Ø  s     z.TestScalarUFuncs.run_ufunc.<locals>.<listcomp>rO  c                 S   s   g | ]}|t jk‘qS r   )r   r]   rÿ  r   r   r   r&   Ú  s     rP  Úexact)r¤   rQ  )rE   r   rG   r"   Úsetr   rY   rZ   r[   Úfloatr@   Z
issubdtyperA   ZinexactÚintegerÚintr3  Úboolrk  rl  rm  r‰   rW  )rd   rh   Z	arg_typesZ
arg_valuesrF   r   r¡   rŒ  r£   r¤   ÚspecialZalltypesrQ  r   r   r   Ú	run_ufunc®  s4    



ü
	

zTestScalarUFuncs.run_ufuncc                 C   sR   dd„ }ddddddg}t jft jft jft jft jft jfg}|  |||¡ d S )Nc                 S   s
   t  | ¡S r   rˆ  ©r9   r   r   r   Ú_funcâ  s    z7TestScalarUFuncs.test_scalar_unary_ufunc.<locals>._func)rx  )rI   )çš™™™™™¹?)çš™™™™™É?)r   rY   rX   r[   rZ   r\   r]   r  ©rd   r
  rX  Ztysr   r   r   Útest_scalar_unary_ufuncá  s      þz(TestScalarUFuncs.test_scalar_unary_ufuncc                 C   sR   dd„ }ddddddg}t jt jt jt jt jt jg}|  |t||ƒt||ƒ¡ d S )Nc                 S   s   t  | |¡S r   re  r8   r   r   r   r
  ì  s    z@TestScalarUFuncs.test_scalar_binary_uniform_ufunc.<locals>._funcrx  rI   r  r  )	r   rY   rX   r[   rZ   r\   r]   r  rE   r  r   r   r   Ú test_scalar_binary_uniform_ufuncë  s       ÿz1TestScalarUFuncs.test_scalar_binary_uniform_ufuncc                 C   sV   dd„ }ddddddg}t jt jt jt jt jt jg}|  |t 	||¡t 	||¡¡ d S )Nc                 S   s   t  | |¡S r   re  r8   r   r   r   r
  õ  s    z>TestScalarUFuncs.test_scalar_binary_mixed_ufunc.<locals>._funcrx  rI   r  r  )
r   rY   rX   r[   rZ   r\   r]   r  rR  rS  r  r   r   r   Útest_scalar_binary_mixed_ufuncô  s      þ
ÿz/TestScalarUFuncs.test_scalar_binary_mixed_ufuncN)r+   rq   rr   Ú__doc__r  r  r  r  r   r   r   r   rþ  ¦  s
   3
	rþ  c                   @   s6   e Zd Zdd„ Ze ejdkd¡dd„ ƒZdd„ Z	d	S )
ÚTestUfuncIssuesc                 C   sP   t dgƒdd„ ƒ}tjddd�}tjddd�}|  |||ƒ|| ||  ¡ d S )Nz(float64,float64)c                 S   s   t  | |¡t  | |¡ S r   re  )Úx1Zx2r   r   r   Úfoo  s    z+TestUfuncIssues.test_issue_651.<locals>.foor“  rU   rO   )r   r@   r`  rW  )rd   r  ÚaÚbr   r   r   Útest_issue_651  s
    
zTestUfuncIssues.test_issue_651)rI   é   z4Complex floor division support removed in NumPy 1.22c                 C   s8   dd„ }t tjtjfƒ|ƒ}|  |ddƒ|ddƒ¡ d S )Nc                 S   s   t  | |¡S r   )r@   r¼   r8   r   r   r   r    s    z+TestUfuncIssues.test_issue_713.<locals>.fooù              ð?)r   r   Z
complex128rj  )rd   r  r¡   r   r   r   Útest_issue_713  s    zTestUfuncIssues.test_issue_713c                    s‚   dd„ }|‰t ˆƒ‰ ‡ ‡‡fdd„}t dddg¡t ddd	g¡g}|D ]4}||dƒ ||t d¡ƒ ||t dddg¡ƒ qHd
S )zF
        <float32 ** int> should return float32, not float64.
        c                 S   s   t  | |¡S r   )r@   rÁ   r8   r   r   r   r    s    z,TestUfuncIssues.test_issue_2006.<locals>.fooc                    s2   ˆ | |ƒ}t j |ˆ| |ƒ¡ ˆ |j| j¡ d S r   )r@   r•   r–   rj  rA   )r9   r:   rŒ  ©r¡   rh   rd   r   r   Úcheck  s    
z.TestUfuncIssues.test_issue_2006.<locals>.checkrI   rx  r]  r  y      @      ÀN)r   r@   r\   rV  rZ   r[   )rd   r  r  Zxsr9   r   r  r   Útest_issue_2006  s     
zTestUfuncIssues.test_issue_2006N)
r+   rq   rr   r  r   ZskipIfr   Znumpy_versionr  r  r   r   r   r   r     s   
ÿ
r  c                   @   sn   e Zd ZdZdZddddddddœZddd	„Zd
d„ Zdd„ Zdd„ Z	e
dd„ ƒZe
dd„ ƒZe
dd„ ƒZdS )Ú_LoopTypesTestera¦  Test code generation for the different loop types defined by ufunc.

    This test relies on class variables to configure the test. Subclasses
    of this class can just override some of these variables to check other
    ufuncs in a different compilation context. The variables supported are:

    _funcs: the ufuncs to test
    _skip_types: letter types that force skipping the loop when testing
                 if present in the NumPy ufunc signature.
    _supported_types: only test loops where all the types in the loop
                      signature are in this collection. If unset, all.

    Note that both, _skip_types and _supported_types must be met for a loop
    to be tested.

    The NumPy ufunc signature has a form like 'ff->f' (for a binary ufunc
    loop taking 2 floats and resulting in a float). In a NumPy ufunc object
    you can get a list of supported signatures by accessing the attribute
    'types'.
    ZOegGrx  r   rƒ   ))rÿ   rt  )rý   ÚD)rý   rt  )rç   r  )r	  rt  )rð   Úd)r¸   r   r   c                 C   s0  |dkrt jddddg|d�S |dkr<t jddddg|d�S |d	krZt jd
ddd
g|d�S |d dkrŒt|ƒdkrvd}t jddddg|d�S |d dkr¾t|ƒdkr¨d}t jddddg|d�S |dkràt jdddtdƒg|d�S |dk�rtjdk� rüd}nd}t j|ddtdƒ dg|d�S td |f ƒ‚d!S )"z<return a suitable array argument for testing the letter typeZbhilqrI   r   r   rå  rO   ZBHILQrx  ú?TFÚmzm8[D]éýÿÿÿZNaTÚMzM8[D]ZNaté   Úfdr·  g      ÀrL   ÚnanÚFDr   y       €      ð¿y              ð¿y      ø?      ø?r  y                ztype %r not understoodN)r@   r^   Úlenr  r   ÚplatformÚRuntimeError)rd   Úa_letter_typeÚindexZnegzeror   r   r   Ú_arg_for_typeN  s4    ÿ
ÿz_LoopTypesTester._arg_for_typec                    sª   |d |j … ||j d …  ‰ t| dg ƒ‰ˆrHt‡fdd„ˆ D ƒƒrHd S t| dg ƒ‰t‡fdd„ˆ D ƒƒrnd S t| dg ƒ}|r˜t‡ fdd„|D ƒƒs˜d S |  ||ˆ ¡ d S )NZ_supported_typesc                 3   s   | ]}|ˆ kV  qd S r   r   ©r$   Úl)Úsupported_typesr   r   Ú	<genexpr>~  s     z/_LoopTypesTester._check_loop.<locals>.<genexpr>Ú_skip_typesc                 3   s   | ]}|ˆ kV  qd S r   r   r/  )Ú
skip_typesr   r   r2  �  s     Ú_required_typesc                 3   s   | ]}|ˆ kV  qd S r   r   r/  )Úletter_typesr   r   r2  †  s   ÿ)rˆ   r‹   rU  r‰   Ú_check_ufunc_with_dtypes)rd   r'   r.   ÚloopZrequired_typesr   )r6  r4  r1  r   Ú_check_loopu  s    ÿÿz_LoopTypesTester._check_loopc                    sB  g }|D ]}|dkr|d }|  |¡ qdd„ |D ƒ}tdd„ |D ƒƒ}t|ƒ|ƒ}‡ fdd„t|ƒD ƒ}	|	D ]}
ˆ j |
¡ qndd„ |	D ƒ}||	Ž  ||Ž  t|||	ƒD ]’\}}}ˆ  |||¡\}}|jj	}ˆ j
 |j|fd¡}|d	krîd
nd}|dkrþdn|}d ddddg¡}| |j|	|||¡}ˆ j|||||d� qªd S )N)r"  r$  z8[D]c                 S   s   g | ]}t  |¡‘qS r   )r@   rA   rÿ  r   r   r   r&   ˜  s     z=_LoopTypesTester._check_ufunc_with_dtypes.<locals>.<listcomp>c                 S   s   g | ]}t  t|ƒd d¡‘qS )rI   rP   )r   r_   r   rÿ  r   r   r   r&   ™  s     c                    s$   g | ]\}}ˆ j ||d � d¡‘qS )©r-  rx  )r.  Úrepeat)r$   r-  r   rc   r   r   r&   �  s   ÿc                 S   s   g | ]}|  ¡ ‘qS r   )r¦  )r$   r  r   r   r   r&   ¡  s     rI   ZfFrO  r  ZdDrP  r‚   z ufunc '{0}' arrays differ ({1}):z	args: {2}zexpected {3}zgot {4})rQ  r¤   Úulps)Úappendr‡   r   Ú	enumerater”  ÚshufflerE   Ú_fixup_resultsrA   ÚcharÚ_ulpsÚgetr+   r(   r"   rW  )rd   r'   r.   ZdtypesZdtypes_with_unitsr   Zarg_dtyZarg_nbtyr¡   Zc_argsZarrZpy_argsrA   Úpy_argÚc_argZtypecharr<  rQ  r¤   r   rc   r   r7  Œ  s>    
ÿ  ÿÿz)_LoopTypesTester._check_ufunc_with_dtypesc                 C   s   ||fS r   r   )rd   rA   rD  rE  r   r   r   r@  ´  s    z_LoopTypesTester._fixup_resultsc                 C   s   |j D ]}|  ||¡ qd S r   )r   Ú_inject_test)Úclsr.   r8  r   r   r   Ú_check_ufunc_loops·  s    
z#_LoopTypesTester._check_ufunc_loopsc              	      s0   ‡ ‡fdd„}t | d ˆjˆ  dd¡¡|ƒ d S )Nc                    s   t ˆƒ}|  |ˆˆ ¡ d S r   )r0   r9  )rd   r'   ©r8  r.   r   r   Útest_template¾  s    z4_LoopTypesTester._inject_test.<locals>.test_templateztest_{0}_{1}z->Ú_)Úsetattrr"   r+   Úreplace)rG  r.   r8  rJ  r   rI  r   rF  ¼  s    
ÿþz_LoopTypesTester._inject_testc                 C   s   | j D ]}|  |¡ qd S r   )Ú_ufuncsrH  )rG  r.   r   r   r   ÚautogenerateÅ  s    
z_LoopTypesTester.autogenerateN)r   )r+   rq   rr   r  r3  rB  r.  r9  r7  r@  ÚclassmethodrH  rF  rO  r   r   r   r   r  -  s(   ú	
'(

r  c                   @   sn   e Zd Zedd… Ze ej¡ e ej¡ e ej	¡ e ej
¡ e ej¡ e ej¡ dZdej ZdS )ÚTestLoopTypesIntNz?bBhHiIlLqQÚfdFDmMO)r+   rq   rr   r   rN  Úremover@   rÁ   rò   Ú
left_shiftÚright_shiftr«   r¾   r5  r  r3  r   r   r   r   rQ  Ë  s   rQ  c                   @   s*   e Zd ZejejgZdZdej	 d Z	dS )Ú TestLoopTypesSubtractAndNegativez?bBhHiIlLqQfdFDÚmMOr!  N)
r+   rq   rr   r@   r«   r¾   rN  r5  r  r3  r   r   r   r   rV  Ü  s   rV  c                       s4   e Zd ZejgZdZdej Zd‡ fdd„	Z	‡  Z
S )ÚTestLoopTypesReciprocalÚbBhHiIlLqQfdFDrW  r   c                    s.   t | j| ƒj||d�}|dkr*d||dk< |S )Nr:  Ú
bBhHiIlLqQrË  r   ©rV   rf   r.  ©rd   r,  r-  Úresre   r   r   r.  ê  s    ÿz%TestLoopTypesReciprocal._arg_for_type)r   )r+   rq   rr   r@   rò   rN  r5  r  r3  r.  rt   r   r   re   r   rX  å  s   
rX  c                       s4   e Zd ZejgZdZdej Zd‡ fdd„	Z	‡  Z
S )ÚTestLoopTypesPowerrY  rW  r   c                    s6   t | j| ƒj||d�}|dkr2|dkr2d||dk < |S )Nr:  rZ  rI   r]  r   r[  r\  re   r   r   r.  ý  s    ÿz TestLoopTypesPower._arg_for_type)r   )r+   rq   rr   r@   rÁ   rN  r5  r  r3  r.  rt   r   r   re   r   r^  ø  s   
r^  c                       s4   e Zd ZejgZdZdej Zd‡ fdd„	Z	‡  Z
S )ÚTestLoopTypesIntLeftShiftrZ  rR  r   c                    s@   t | j| ƒj||d�}|dkr<|jjd }t |d|d ¡}|S ©Nr:  rI   é   r   )rV   rf   r.  rA   Úitemsizer@   Úclip©rd   r,  r-  r]  Z	bit_countre   r   r   r.    s    ÿz'TestLoopTypesIntLeftShift._arg_for_type)r   )r+   rq   rr   r@   rT  rN  r5  r  r3  r.  rt   r   r   re   r   r_    s   
r_  c                       s4   e Zd ZejgZdZdej Zd‡ fdd„	Z	‡  Z
S )ÚTestLoopTypesIntRightShiftrZ  rR  r   c                    sR   t | j| ƒj||d�}|dkr<|jjd }t |d|d ¡}|dkrNt |¡}|S r`  )rV   rf   r.  rA   rb  r@   rc  rŠ  rd  re   r   r   r.  '  s    ÿ

z(TestLoopTypesIntRightShift._arg_for_type)r   )r+   rq   rr   r@   rU  rN  r5  r  r3  r.  rt   r   r   re   r   re  "  s   
re  c                   @   s2   e Zd ZejejejgZdZde	j
 Z
dd„ ZdS )ÚTestLoopTypesFloorDividerY  rW  c                 C   sF   |j dkr>t |¡t |¡@ }||dk|dk@ O }|| ||< ||fS )Nrµ   rL   )rŠ   r@   r8  r:  )rd   rA   rD  rE  Úpredr   r   r   r@  I  s
    
z'TestLoopTypesFloorDivide._fixup_resultsN)r+   rq   rr   r@   r¼   rÊ   ÚdivmodrN  r5  r  r3  r@  r   r   r   r   rf  D  s   
rf  c                   @   sf   e Zd Zedd… Zer$e ej¡ e ej	¡ e ej
¡ e ej¡ e ej¡ dZdej ZdS )ÚTestLoopTypesFloatNr&  ZFDmMO)r+   rq   rr   r   rN  Ú	iswindowsrS  r@   r<  r¼   rÊ   rh  rÐ   r5  r  r3  r   r   r   r   ri  W  s   ri  c                   @   s&   e Zd Zedd… ZdZdej ZdS )ÚTestLoopTypesComplexNr(  rW  )r+   rq   rr   r   rN  r5  r  r3  r   r   r   r   rk  f  s   rk  c                   @   s`   e Zd Zedd… Ze ej¡ 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 )ÚTestLoopTypesDatetimeNZmMc              	   C   sŒ   t j}t|ƒ}|  ||dddg¡ |  ||dddg¡ |  ||dddg¡ |  ||dddg¡ |  t¡� |  ||dddg¡ W 5 Q R X d S )Núm8[s]úm8[m]úm8[ms])r@   r©   r0   r7  ÚassertRaisesr   ©rd   r.   r'   r   r   r   Útest_add„  s    ÿzTestLoopTypesDatetime.test_addc              	   C   sŒ   t j}t|ƒ}|  ||dddg¡ |  ||dddg¡ |  ||dddg¡ |  ||dddg¡ |  t¡� |  ||dddg¡ W 5 Q R X d S )NúM8[s]úM8[m]rm  ro  rn  )r@   r«   r0   r7  rp  r   rq  r   r   r   Útest_subtract’  s    ÿz#TestLoopTypesDatetime.test_subtractc              	   C   sd   t j}t|ƒ}|  ||dddg¡ |  ||dddg¡ |  t¡� |  ||dddg¡ W 5 Q R X d S )Nrm  Úqzm8[us]rn  )r@   r­   r0   r7  rp  r   rq  r   r   r   Útest_multiply   s    z#TestLoopTypesDatetime.test_multiplyc              	   C   sŒ   t j}t|ƒ}|  ||dddg¡ |  ||dddg¡ |  ||dddg¡ |  ||dddg¡ |  t¡� |  ||dddg¡ W 5 Q R X d S )Nrn  rm  r   rv  )r@   rº   r0   r7  rp  r   rq  r   r   r   Útest_true_divideª  s    z&TestLoopTypesDatetime.test_true_dividec              	   C   sd   t j}t|ƒ}|  ||dddg¡ |  ||dddg¡ |  t¡� |  ||dddg¡ W 5 Q R X d S )Nrn  rv  rm  r   )r@   r¼   r0   r7  rp  r   rq  r   r   r   Útest_floor_divide·  s    z'TestLoopTypesDatetime.test_floor_dividec                 C   s\   t |ƒ}|  ||dddg¡ |  ||dddg¡ |  ||dddg¡ |  ||dddg¡ d S )Nrn  rm  r!  rt  rs  )r0   r7  rq  r   r   r   Ú_check_comparisonÁ  s
    z'TestLoopTypesDatetime._check_comparisonc                 C   s0   t jt jt jt jt jt jfD ]}|  |¡ qd S r   )r@   r$  r"  r  r   r  r  rz  rv   r   r   r   Útest_comparisonsÊ  s
     ÿz&TestLoopTypesDatetime.test_comparisons)r+   rq   rr   r   rN  rS  r@   rh  r5  rr  ru  rw  rx  ry  rz  r{  r   r   r   r   rl  r  s   


	rl  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestUFuncBadArgsc              	   C   s8   dd„ }|   t¡� tt tj¡gƒ|ƒ W 5 Q R X d S )Nc                 S   s   t  | ¡}|S )zerror: np.add requires two argsre  )r9   r[  r   r   r   r   Õ  s    
z0TestUFuncBadArgs.test_missing_args.<locals>.func©rp  r	   r   r   r]   ©rd   r   r   r   r   Útest_missing_argsÔ  s    z"TestUFuncBadArgs.test_missing_argsc              	   C   sJ   dd„ }t  t jdd¡}||||ƒ}|  t¡� t|ƒ|ƒ W 5 Q R X d S )Nc                 S   s   t  | | ||¡}|S )zerror: too many argsre  )r9   ÚoutZout2r[  r   r   r   r   Þ  s    z1TestUFuncBadArgs.test_too_many_args.<locals>.funcrI   rP   )r   r_   r]   rp  r	   r   )rd   r   Z
array_typern  r   r   r   Útest_too_many_argsÝ  s
    z#TestUFuncBadArgs.test_too_many_argsc              	   C   s8   dd„ }|   t¡� tt tj¡gƒ|ƒ W 5 Q R X d S )Nc                 S   s   d}t  | | |¡ dS )z0error: scalar as a return value is not supportedr   Nre  r8   r   r   r   r   ê  s    zATestUFuncBadArgs.test_no_scalar_result_by_reference.<locals>.funcr}  r~  r   r   r   Ú"test_no_scalar_result_by_referenceé  s    z3TestUFuncBadArgs.test_no_scalar_result_by_referenceN)r+   rq   rr   r  r�  r‚  r   r   r   r   r|  Ó  s   	r|  c                   @   s   e Zd Zdd„ ZdS )Ú TestUFuncCompilationThreadSafetyc                    sf   g ‰ t dd„ ƒ‰‡ ‡fdd„‰‡fdd„tdƒD ƒ}|D ]}| ¡  q8|D ]}| ¡  qJ|  ˆ ¡ dS )	z{
        Test that (lazy) compiling from several threads at once doesn't
        produce errors (see issue #2403).
        c                 S   s   | d S )NrI   r   r	  r   r   r   r  ü  s    z7TestUFuncCompilationThreadSafety.test_lock.<locals>.fooc               
      sl   z:t jdt jd�} t jdt jd�d }t j ˆ| ƒ|¡ W n, tk
rf } zˆ  |¡ W 5 d }~X Y nX d S )N)r“  rO   g      ð?)r@   Zonesr]   r•   rq  Ú	Exceptionr=  )r  r£   Úe)Úerrorsr  r   r   r      s    z;TestUFuncCompilationThreadSafety.test_lock.<locals>.wrapperc                    s   g | ]}t jˆ d �‘qS ))Útarget)Ú	threadingÚThreadr#   )r   r   r   r&     s     z>TestUFuncCompilationThreadSafety.test_lock.<locals>.<listcomp>rÌ   N)r   r)   Ústartr(   ZassertFalse)rd   Úthreadsr   r   )r†  r  r   r   Ú	test_lockõ  s    


z*TestUFuncCompilationThreadSafety.test_lockN)r+   rq   rr   rŒ  r   r   r   r   rƒ  ó  s   rƒ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestUfuncOnContextc              	   C   sr   t j}| tj¡}|  |t¡ t tj¡}|  ||¡ t	ƒ }|  
t¡�}t |¡ W 5 Q R X |  |jj|f¡ d S r   )r   Ztarget_contextÚget_ufunc_infor@   r©   ZassertIsInstanceÚdictr   rj  Úobjectrp  ÚKeyErrorÚ	exceptionr   )rd   Ú	targetctxZadd_infor£   ZbadkeyÚraisesr   r   r   Útest_cpu_get_ufunc_info  s    z*TestUfuncOnContext.test_cpu_get_ufunc_infoc              	   C   sD   t tjdƒ}|  t¡�}| tj¡ W 5 Q R X |  t	|j
ƒd¡ d S )NÚcpuz<<numba\..*\.BaseContext object at .*> does not support ufunc)r   r   Ztyping_contextrp  ÚNotImplementedErrorrŽ  r@   r©   ÚassertRegexr>   r’  )rd   r“  r”  r   r   r   Útest_base_get_ufunc_info!  s    þz+TestUfuncOnContext.test_base_get_ufunc_infoN)r+   rq   rr   r•  r™  r   r   r   r   r�    s   r�  c                   @   s   e Zd Zdd„ ZdS )ÚTestUfuncWriteInputc                 C   sl   t dgdƒdd„ ƒ}tj dd¡}tj|tjd�}|||ƒ tj tjdd	d	d	dgtj	d�|j
d
d�¡ d S )Nzvoid(float64[:], uint8[:])z(n)->(n)c                 S   s(   t | jƒD ]}|d dkr
d||< q
d S )Nr   r   rI   )r)   rT  )r9   r€  r%   r   r   r   r   .  s    z6TestUfuncWriteInput.test_write_input_arg.<locals>.funcr“  rƒ   rO   TFr   )Zaxis)r   r@   r”  ZrandZ
zeros_liker`   r•   rq  r^   r3  r‰   )rd   r   r9   r€  r   r   r   Útest_write_input_arg-  s    



þz(TestUfuncWriteInput.test_write_input_argN)r+   rq   rr   r›  r   r   r   r   rš  ,  s   rš  Ú__main__)Er   rR  r   r�   rˆ  r�  Únumpyr@   r   Znumbar   r   r   r   Z
numba.corer   Znumba.np.numpy_supportr   Znumba.core.errorsr   r	   Znumba.tests.supportr
   r   Znumba.core.typing.npydeclr   Znumba.npr   Znumba.core.registryr   Znumba.core.baser   r   r‡   Ú__itemsize__Zis32bitsr*  r”   rj  r    r0   r6   r7   r?   rG   rH   ru   r¦   r‹  rþ  r  r  rQ  rO  rV  rX  r^  r_  re  rf  ri  rk  rl  r|  rƒ  r�  rš  r+   Úmainr   r   r   r   Ú<module>   s‚   

Id    i  ?Z- 	^ 
