a
    
d2(                     @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' dd Z(G d	d
 d
eZ)G dd de)Z*G dd de)Z+G dd deZ,e-dkre.  dS )    N)unittestCUDATestCase)types)cuda)real_usecaseimag_usecaseconjugate_usecasephase_usecasepolar_as_complex_usecaserect_usecaseisnan_usecaseisinf_usecaseisfinite_usecaseexp_usecaselog_usecaselog_base_usecaselog10_usecasesqrt_usecaseasin_usecaseacos_usecaseatan_usecasecos_usecasesin_usecasetan_usecaseacosh_usecaseasinh_usecaseatanh_usecasecosh_usecasesinh_usecasetanh_usecase)numpy_supportc                    s   t dd  D rJ ttjr&J tj  dd| dd gt  D }t dkrnfdd	}n"t d
krfdd	}ndsJ tt|| fdd}|S )Nc                 s   s   | ]}t |tjV  qd S N)
isinstancer   Array.0tp r'   m/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/cuda/tests/cudapy/test_complex.py	<genexpr>       z&compile_scalar_func.<locals>.<genexpr>T)Zdevicec                 S   s   g | ]}t |d dqS )   C)r   r#   r$   r'   r'   r(   
<listcomp>    s   z'compile_scalar_func.<locals>.<listcomp>r+   c                    s,   t d}|| jd k r( || | |< d S Nr+   r   r   gridshape)outaidevice_funcr'   r(   kernel_func$   s    
z(compile_scalar_func.<locals>.kernel_func   c                    s2   t d}|| jd k r. || || | |< d S r.   r/   )r2   r3   br4   r5   r'   r(   r7   )   s    
r   c                    s   t |   fddD }tj td}t| D ]$\}}t||D ]\}}|||< qHq6|g| }tt	 d df |  t
|S )Nc                    s    g | ]}t j t|d qS )Zdtype)npemptyr    as_dtyper$   nr'   r(   r-   4   s   z?compile_scalar_func.<locals>.kernel_wrapper.<locals>.<listcomp>r:      )lenr;   r<   r    r=   	enumeratezipintmathceillist)valuesinputsoutputr4   vsvinpargs)argtypeskernelrestyper>   r(   kernel_wrapper2   s    

z+compile_scalar_func.<locals>.kernel_wrapper)	anyr"   r   r#   r   jitrG   rA   tuple)pyfuncrO   rQ   Zkernel_typesr7   rR   r'   )rO   r6   rP   rQ   r(   compile_scalar_func   s    rW   c                   @   s6   e Zd Zdd Zdd Zdd Zdd	d
ZeZeZdS )BaseComplexTestc              
   C   s8   ddddddt dt dt d	g	}d
d t||D S )N               r+   g      ?g      -inf+infnanc                 S   s   g | ]\}}t ||qS r'   complexr%   xyr'   r'   r(   r-   E   r*   z0BaseComplexTest.basic_values.<locals>.<listcomp>)float	itertoolsproductselfZrealsr'   r'   r(   basic_valuesB   s    zBaseComplexTest.basic_valuesc              
   C   s@   ddddt j t j
 tdtdtdg	}dd t||D S )	NrZ   r+   r[   r\   r]   r^   c                 S   s   g | ]\}}t ||qS r'   r_   ra   r'   r'   r(   r-   J   r*   z/BaseComplexTest.more_values.<locals>.<listcomp>rE   pird   re   rf   rg   r'   r'   r(   more_valuesG   s    zBaseComplexTest.more_valuesc              	   C   s:   ddddt j t j
 tdtdg}dd t||D S )	NrY   rZ   r+   r[   infr\   c                 S   s   g | ]\}}t ||qS r'   r_   ra   r'   r'   r(   r-   O   r*   z2BaseComplexTest.non_nan_values.<locals>.<listcomp>rj   rg   r'   r'   r(   non_nan_valuesL   s    zBaseComplexTest.non_nan_valuesr+   Fc                 C   s,  |D ] }t |tjr|f}t |tr2|d | }|jd tjtjfv rLdnd}t||j|j}g }	g }
|D ]v}t |t	tfs|f}z|

||  |	
| W ql ty } z(| dt| W Y d }~qlW Y d }~qld }~0 0 ql||	}t||
|	D ],\}}}d||f }| j||||||d qqd S )Nr   singledoublezmath domain errorzfor input %r with prec %r)preculpsignore_sign_on_zeromsg)r"   r   TyperU   rN   float32	complex64rW   return_typerG   append
ValueErrorZassertInstrrC   ZassertPreciseEqual)rh   rV   ZsigsrH   rr   rs   sigrq   ZcudafuncZ	ok_valuesexpected_listrN   eZgot_listgotexpectedrt   r'   r'   r(   run_funcQ   s:    

$
zBaseComplexTest.run_funcN)r+   F)	__name__
__module____qualname__ri   rl   rn   r   	run_unary
run_binaryr'   r'   r'   r(   rX   @   s   
rX   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestComplexc                 C   s,   |   }| |dd tjtjfD | d S )Nc                 S   s   g | ]}| |qS r'   underlying_floatr$   r'   r'   r(   r-   x   s   z0TestComplex.check_real_image.<locals>.<listcomp>)ri   r   r   rw   
complex128rh   rV   rH   r'   r'   r(   check_real_imageu   s    
zTestComplex.check_real_imagec                 C   s   |  t d S r!   )r   r   rh   r'   r'   r(   	test_real|   s    zTestComplex.test_realc                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   	test_imag   s    zTestComplex.test_imagc                 C   s&   t }|  }| |tjtjg| d S r!   )r   ri   r   r   rw   r   r   r'   r'   r(   test_conjugate   s    
zTestComplex.test_conjugateN)r   r   r   r   r   r   r   r'   r'   r'   r(   r   s   s   r   c                   @   s   e Zd ZdZdd Zd7ddZd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 ZdS )8	TestCMathz)
    Tests for cmath module support.
    c                 C   s(   |  |dd tjtjfD |   d S )Nc                 S   s   g | ]}t |qS r'   )r   booleanr$   r'   r'   r(   r-      s   z2TestCMath.check_predicate_func.<locals>.<listcomp>)r   r   r   rw   ri   )rh   rV   r'   r'   r(   check_predicate_func   s    
zTestCMath.check_predicate_funcr+   NFc                 C   sb   |rdd }ndd }| j ||tjg|p0|  ||d | j ||tjg|pT|  ||d d S )Nc                 S   s
   |  | S r!   r   r&   r'   r'   r(   r|      s    z'TestCMath.check_unary_func.<locals>.sigc                 S   s   | | S r!   r'   r   r'   r'   r(   r|      s    rr   rs   )r   r   r   rl   rw   ri   )rh   rV   rr   rH   returns_floatrs   r|   r'   r'   r(   check_unary_func   s    
zTestCMath.check_unary_funcc                 C   s   | j tdd d S )NT)r   )r   r	   r   r'   r'   r(   
test_phase   s    zTestCMath.test_phasec                 C   s   |  t d S r!   )r   r
   r   r'   r'   r(   
test_polar   s    zTestCMath.test_polarc                    s0    fdd}|t j   |t j   d S )Nc                    s.   dd |D }| j } t| ||g| d S )Nc                 S   s.   g | ]&}t |jr|jd kr|j|jfqS )r   )rE   isinfimagreal)r%   zr'   r'   r(   r-      s   z8TestCMath.test_rect.<locals>.do_test.<locals>.<listcomp>)r   r   r   )r&   Zseed_valuesrH   Z
float_typer   r'   r(   do_test   s
    z$TestCMath.test_rect.<locals>.do_test)r   r   rl   rw   ri   )rh   r   r'   r   r(   	test_rect   s    zTestCMath.test_rectc                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   
test_isnan   s    zTestCMath.test_isnanc                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   
test_isinf   s    zTestCMath.test_isinfc                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   test_isfinite   s    zTestCMath.test_isfinitec                 C   s   | j tdd d S Nr8   rr   )r   r   r   r'   r'   r(   test_exp   s    zTestCMath.test_expc                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   test_log   s    zTestCMath.test_logc                 C   sF   t t|  |  }tjtjftjtjfg}| jt||dd d S )N   r   )	rG   re   rf   rl   r   r   rw   r   r   )rh   rH   Zvalue_typesr'   r'   r(   test_log_base   s    


zTestCMath.test_log_basec                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   
test_log10   s    zTestCMath.test_log10c                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   	test_sqrt   s    zTestCMath.test_sqrtc                 C   s   | j tdd d S r   )r   r   r   r'   r'   r(   	test_acos   s    zTestCMath.test_acosc                 C   s   | j tdd d S r   )r   r   r   r'   r'   r(   	test_asin   s    zTestCMath.test_asinc                 C   s   | j td|  d d S )Nr8   )rr   rH   )r   r   rn   r   r'   r'   r(   	test_atan   s    zTestCMath.test_atanc                 C   s   | j tdd d S r   )r   r   r   r'   r'   r(   test_cos   s    zTestCMath.test_cosc                 C   s   | j tdd d S r   )r   r   r   r'   r'   r(   test_sin   s    zTestCMath.test_sinc                 C   s   | j tddd d S Nr8   Tr   )r   r   r   r'   r'   r(   test_tan   s    zTestCMath.test_tanc                 C   s   |  t d S r!   )r   r   r   r'   r'   r(   
test_acosh   s    zTestCMath.test_acoshc                 C   s   | j tdd d S r   )r   r   r   r'   r'   r(   
test_asinh   s    zTestCMath.test_asinhc                 C   s   | j tddd d S r   )r   r   r   r'   r'   r(   
test_atanh   s    zTestCMath.test_atanhc                 C   s   | j tdd d S r   )r   r   r   r'   r'   r(   	test_cosh   s    zTestCMath.test_coshc                 C   s   | j tdd d S r   )r   r   r   r'   r'   r(   	test_sinh   s    zTestCMath.test_sinhc                 C   s   | j tddd d S r   )r   r   r   r'   r'   r(   	test_tanh  s    zTestCMath.test_tanh)r+   NFF)r   r   r   __doc__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      s8     
r   c                   @   s   e Zd Zdd Zdd ZdS )TestAtomicOnComplexComponentsc                 C   sX   t jdd }d}t|t|d  }| }|d|f | tj|d | d S )Nc                 S   s    t d}t j| j|d d S Nr+   )r   r0   atomicaddr   rH   r4   r'   r'   r(   atomic_add_one  s    
zITestAtomicOnComplexComponents.test_atomic_on_real.<locals>.atomic_add_one                  ?r+   r   rT   r;   ZarangecopyZtestingZassert_equal)rh   r   Narr1arr2r'   r'   r(   test_atomic_on_real  s    
z1TestAtomicOnComplexComponents.test_atomic_on_realc                 C   sX   t jdd }d}t|t|d  }| }|d|f | tj|d | d S )Nc                 S   s    t d}t j| j|d d S r   )r   r0   r   r   r   r   r'   r'   r(   atomic_add_one_j  s    
zKTestAtomicOnComplexComponents.test_atomic_on_imag.<locals>.atomic_add_one_jr   r   r+   r   )rh   r   r   r   r   r'   r'   r(   test_atomic_on_imag  s    
z1TestAtomicOnComplexComponents.test_atomic_on_imagN)r   r   r   r   r   r'   r'   r'   r(   r     s   r   __main__)/rE   re   numpyr;   Znumba.cuda.testingr   r   Z
numba.corer   Znumbar   Znumba.tests.complex_usecasesr   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   Znumba.npr    rW   rX   r   r   r   r   mainr'   r'   r'   r(   <module>   s   p&3|!
