o
    i2(                     @   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re.  dS 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r7fdd	}nt d
krDfdd	}nJ tt|| fdd}|S )Nc                 s   s    | ]	}t |tjV  qd S N)
isinstancer   Array.0tp r'   a/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/cuda/tests/cudapy/test_complex.py	<genexpr>   s    z&compile_scalar_func.<locals>.<genexpr>T)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                    s0   t d}|| jd k r || | |< d S d S Nr+   r   r   gridshape)outaidevice_funcr'   r(   kernel_func$   s   
z(compile_scalar_func.<locals>.kernel_func   c                    s6   t d}|| jd k r || || | |< d S 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 ]\}}|||< q$q|g| }tt	 d df |  t
|S )Nc                    s    g | ]}t j t|d qS )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   jitrH   rB   tuple)pyfuncrP   rR   kernel_typesr7   rS   r'   )rP   r6   rQ   rR   r(   compile_scalar_func   s   rY   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      g | ]	\}}t ||qS r'   complexr%   xyr'   r'   r(   r-   E       z0BaseComplexTest.basic_values.<locals>.<listcomp>)float	itertoolsproductself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 )	Nr\   r+   r]   r^   r_   r`   c                 S   ra   r'   rb   rd   r'   r'   r(   r-   J   rg   z/BaseComplexTest.more_values.<locals>.<listcomp>rF   pirh   ri   rj   rk   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 )	Nr[   r\   r+   r]   infr^   c                 S   ra   r'   rb   rd   r'   r'   r(   r-   O   rg   z2BaseComplexTest.non_nan_values.<locals>.<listcomp>ro   rk   r'   r'   r(   non_nan_valuesL   s   zBaseComplexTest.non_nan_valuesr+   Fc                 C   s  |D ]}t |tjr|f}t |tr|d | }|jd tjtjfv r%dnd}t||j|j}g }	g }
|D ]4}t |t	tfsA|f}z|

||  |	
| W q5 tyi } z| dt| W Y d }~q5d }~ww ||	}t||
|	D ]\}}}d||f }| j||||||d qtqd S )Nr   singledoublezmath domain errorzfor input %r with prec %r)preculpsignore_sign_on_zeromsg)r"   r   TyperV   rO   float32	complex64rY   return_typerH   append
ValueErrorassertInstrrD   assertPreciseEqual)rl   rW   sigsrI   rw   rx   sigrv   cudafunc	ok_valuesexpected_listrO   egot_listgotexpectedry   r'   r'   r(   run_funcQ   sB   

zBaseComplexTest.run_funcN)r+   F)	__name__
__module____qualname__rn   rq   rs   r   	run_unary
run_binaryr'   r'   r'   r(   rZ   @   s    
rZ   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       z0TestComplex.check_real_image.<locals>.<listcomp>)rn   r   r   r|   
complex128rl   rW   rI   r'   r'   r(   check_real_imageu   s   
zTestComplex.check_real_imagec                 C      |  t d S r!   )r   r   rl   r'   r'   r(   	test_real|      zTestComplex.test_realc                 C   r   r!   )r   r   r   r'   r'   r(   	test_imag   r   zTestComplex.test_imagc                 C   s&   t }|  }| |tjtjg| d S r!   )r   rn   r   r   r|   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-      r   z2TestCMath.check_predicate_func.<locals>.<listcomp>)r   r   r   r|   rn   )rl   rW   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|p|  ||d | j ||tjg|p*|  ||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   rw   rx   )r   r   r   rq   r|   rn   )rl   rW   rw   rI   returns_floatrx   r   r'   r'   r(   check_unary_func   s   

zTestCMath.check_unary_funcc                 C      | j tdd d S )NT)r   )r   r	   r   r'   r'   r(   
test_phase      zTestCMath.test_phasec                 C   r   r!   )r   r
   r   r'   r'   r(   
test_polar   r   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   )rF   isinfimagreal)r%   zr'   r'   r(   r-      s    


z8TestCMath.test_rect.<locals>.do_test.<locals>.<listcomp>)r   r   r   )r&   seed_valuesrI   
float_typer   r'   r(   do_test   s
   z$TestCMath.test_rect.<locals>.do_test)r   r   rq   r|   rn   )rl   r   r'   r   r(   	test_rect   s   zTestCMath.test_rectc                 C   r   r!   )r   r   r   r'   r'   r(   
test_isnan   r   zTestCMath.test_isnanc                 C   r   r!   )r   r   r   r'   r'   r(   
test_isinf   r   zTestCMath.test_isinfc                 C   r   r!   )r   r   r   r'   r'   r(   test_isfinite   r   zTestCMath.test_isfinitec                 C   r   Nr8   rw   )r   r   r   r'   r'   r(   test_exp   r   zTestCMath.test_expc                 C   r   r!   )r   r   r   r'   r'   r(   test_log   r   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   )	rH   ri   rj   rq   r   r   r|   r   r   )rl   rI   value_typesr'   r'   r(   test_log_base   s   



zTestCMath.test_log_basec                 C   r   r!   )r   r   r   r'   r'   r(   
test_log10   r   zTestCMath.test_log10c                 C   r   r!   )r   r   r   r'   r'   r(   	test_sqrt   r   zTestCMath.test_sqrtc                 C   r   r   )r   r   r   r'   r'   r(   	test_acos   r   zTestCMath.test_acosc                 C   r   r   )r   r   r   r'   r'   r(   	test_asin   r   zTestCMath.test_asinc                 C   s   | j td|  d d S )Nr8   )rw   rI   )r   r   rs   r   r'   r'   r(   	test_atan   s   
zTestCMath.test_atanc                 C   r   r   )r   r   r   r'   r'   r(   test_cos   r   zTestCMath.test_cosc                 C   r   r   )r   r   r   r'   r'   r(   test_sin   s   zTestCMath.test_sinc                 C      | j tddd d S Nr8   Tr   )r   r   r   r'   r'   r(   test_tan      
zTestCMath.test_tanc                 C   r   r!   )r   r   r   r'   r'   r(   
test_acosh   r   zTestCMath.test_acoshc                 C   r   r   )r   r   r   r'   r'   r(   
test_asinh   r   zTestCMath.test_asinhc                 C   r   r   )r   r   r   r'   r'   r(   
test_atanh   r   zTestCMath.test_atanhc                 C   r   r   )r   r   r   r'   r'   r(   	test_cosh   r   zTestCMath.test_coshc                 C   r   r   )r   r   r   r'   r'   r(   	test_sinh   r   zTestCMath.test_sinhc                 C   r   r   )r   r   r   r'   r'   r(   	test_tanh  r   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      s:    
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       t d}t j| j|d d S Nr+   )r   r0   atomicaddr   rI   r4   r'   r'   r(   atomic_add_one     
zITestAtomicOnComplexComponents.test_atomic_on_real.<locals>.atomic_add_one                  ?r+   r   rU   r<   arangecopytestingassert_equal)rl   r   Narr1arr2r'   r'   r(   test_atomic_on_real     
z1TestAtomicOnComplexComponents.test_atomic_on_realc                 C   sX   t jdd }d}t|t|d  }| }|d|f | tj|d | d S )Nc                 S   r   r   )r   r0   r   r   r   r   r'   r'   r(   atomic_add_one_j  r   zKTestAtomicOnComplexComponents.test_atomic_on_imag.<locals>.atomic_add_one_jr   r   r+   r   )rl   r   r   r   r   r'   r'   r(   test_atomic_on_imag  r   z1TestAtomicOnComplexComponents.test_atomic_on_imagN)r   r   r   r   r   r'   r'   r'   r(   r     s    r   __main__)/rF   ri   numpyr<   numba.cuda.testingr   r   
numba.corer   numbar   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   numba.npr    rY   rZ   r   r   r   r   mainr'   r'   r'   r(   <module>   s     p&3|!