B
     \.                 @   s   d dl mZmZmZ d dlZd dlZd dlZd dlZd dlm	Z
 d dlmZmZmZ d dlmZ ddlmZmZ ddlT e Zed	 e ZG d
d deZG dd deeZG dd deeZedkre
  dS )    )print_functionabsolute_importdivisionN)unittest_support)compile_isolatedFlagsutils)types   )TestCasetag)*Zenable_pyobjectc               @   sB   e Zd Zdd Zdd Zdd Zddefd	d
ZdefddZdS )BaseComplexTestc          	   C   sJ   ddddddt dt dg}tjd	kr4|t d
g7 }dd t||D S )Ng       g        r
   g      ?g      z-infz+infwin32nanc             S   s   g | ]\}}t ||qS  )complex).0xyr   r   7lib/python3.7/site-packages/numba/tests/test_complex.py
<listcomp>   s    z0BaseComplexTest.basic_values.<locals>.<listcomp>)floatsysplatform	itertoolsproduct)selfrealsr   r   r   basic_values   s
    
zBaseComplexTest.basic_valuesc          	   C   sR   ddddt j t j
 tdtdg}tjdkr<|tdg7 }d	d
 t||D S )Ng       g        r
   r   z-infz+infr   r   c             S   s   g | ]\}}t ||qS r   )r   )r   r   r   r   r   r   r   "   s    z/BaseComplexTest.more_values.<locals>.<listcomp>)mathpir   r   r   r   r   )r   r   r   r   r   more_values   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 )	Ng       g        r
   r   infz-infc             S   s   g | ]\}}t ||qS r   )r   )r   r   r   r   r   r   r   '   s    z2BaseComplexTest.non_nan_values.<locals>.<listcomp>)r!   r"   r   r   r   )r   r   r   r   r   non_nan_values$   s    zBaseComplexTest.non_nan_valuesr
   Nc             C   s   x|D ]}t ||g|d}|j}	|tjtjfkr4dnd}
xx|D ]p}y||}W n4 tk
r } z| dt| w>W d d }~X Y nX |	|}d||
f }| j|||
|||d q>W qW d S )N)flagssingledoublezmath domain errorzfor input %r with prec %r)preculpsabs_tolmsg)	r   entry_pointr	   float32	complex64
ValueErrorassertInstrassertPreciseEqual)r   pyfuncZx_typesZx_valuesr*   r+   r&   txcrcfuncr)   vxexpectedegotr,   r   r   r   	run_unary)   s    


zBaseComplexTest.run_unaryc             C   s   x|D ]\}}t |||g|d}|j}	t||gttjtjg@ rFdnd}
x|D ]\}}y|||}W nH tk
r } z| dt| wPW d d }~X Y n t	k
r   wPY nX |	||}d||f|
f }| j
|||
||d qPW qW d S )N)r&   r'   r(   zmath domain errorzfor input %r with prec %r)r)   r*   r,   )r   r-   setr	   r.   r/   r0   r1   r2   ZeroDivisionErrorr3   )r   r4   value_typesvaluesr*   r&   r5   Ztyr6   r7   r)   r8   Zvyr9   r:   r;   r,   r   r   r   
run_binary:   s"     

zBaseComplexTest.run_binary)	__name__
__module____qualname__r    r#   r%   enable_pyobj_flagsr<   rA   r   r   r   r   r      s   r   c               @   sd   e Zd ZefddZdd ZefddZdd Zefd	d
Zdd Z	efddZ
eddd ZdS )TestComplexc             C   s`   | j ttjtjg|  |d | j ttjtjgdddg|d | j ttjtj	gddg|d d S )N)r&   r
   r   g      ?g      )
r<   Zreal_usecaser	   r/   
complex128r    int8int64r.   float64)r   r&   r   r   r   	test_realR   s    zTestComplex.test_realc             C   s   | j td d S )N)r&   )rL   no_pyobj_flags)r   r   r   r   test_real_npmZ   s    zTestComplex.test_real_npmc             C   s`   | j ttjtjg|  |d | j ttjtjgdddg|d | j ttjtj	gddg|d d S )N)r&   r
   r   rG   g      ?g      )
r<   Zimag_usecaser	   r/   rH   r    rI   rJ   r.   rK   )r   r&   r   r   r   	test_imag]   s    zTestComplex.test_imagc             C   s   | j td d S )N)r&   )rO   rM   )r   r   r   r   test_imag_npme   s    zTestComplex.test_imag_npmc             C   s`   | j ttjtjg|  |d | j ttjtjgdddg|d | j ttjtj	gddg|d d S )N)r&   r
   r   rG   g      ?g      )
r<   Zconjugate_usecaser	   r/   rH   r    rI   rJ   r.   rK   )r   r&   r   r   r   test_conjugateh   s    zTestComplex.test_conjugatec             C   s   | j td d S )N)r&   )rQ   rM   )r   r   r   r   test_conjugate_npmp   s    zTestComplex.test_conjugate_npmc             C   sF   t t|  |  }tjtjftjtjfg}| jt|||d dS )zN
        Test complex.__div__ implementation with non-trivial values.
        )r&   N)	listr   r   r#   r	   rH   r/   rA   Zdiv_usecase)r   r&   r@   r?   r   r   r   test_divs   s    
zTestComplex.test_div	importantc             C   s   | j td d S )N)r&   )rT   rM   )r   r   r   r   test_div_npm}   s    zTestComplex.test_div_npmN)rB   rC   rD   rE   rL   rN   rO   rP   rQ   rR   rT   r   rV   r   r   r   r   rF   P   s   
rF   c               @   s  e Zd ZdZdd ZdgddZdd	 Zd
d Zdd Zdd Z	e
fddZdd Ze
fddZeddd Ze
fddZeddd Zeejdk de
fdd Zeejdk dd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Ze
fd+d,Zd-d. Zd/d0 Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?d@ Z&dAdB Z'dCdD Z(dEdF Z)dGdH Z*dIdJ Z+dKdL Z,dMdN Z-dOdP Z.dQdR Z/dSdT Z0dUdV Z1dWdX Z2dYdZ Z3d[d\ Z4d]d^ Z5d_d` Z6dadb Z7dcdd Z8dedf Z9dS )h	TestCMathz)
    Tests for cmath module support.
    c             C   s"   | j |tjtjg|  |d d S )N)r&   )r<   r	   rH   r/   r    )r   r4   r&   r   r   r   check_predicate_func   s    zTestCMath.check_predicate_funcr
   Nc             C   sH   | j |tjg|p|  |||d | j |tjg|p8|  |||d d S )N)r&   r*   r+   )r<   r	   rH   r#   r/   r    )r   r4   r&   r*   r+   r@   r   r   r   check_unary_func   s    zTestCMath.check_unary_funcc             C   s   |  tt d S )N)rY   phase_usecaserE   )r   r   r   r   
test_phase   s    zTestCMath.test_phasec             C   s   |  tt d S )N)rY   rZ   rM   )r   r   r   r   test_phase_npm   s    zTestCMath.test_phase_npmc             C   s   |  tt d S )N)rY   polar_usecaserE   )r   r   r   r   
test_polar   s    zTestCMath.test_polarc             C   s   |  tt d S )N)rY   r]   rM   )r   r   r   r   test_polar_npm   s    zTestCMath.test_polar_npmc                s2    fdd}|t j  |t j  d S )Nc                s*   dd |D }j t| | fg| d d S )Nc             S   s.   g | ]&}t |jr|jd kr|j|jfqS )r   )r!   Zisinfimagreal)r   zr   r   r   r      s    z8TestCMath.test_rect.<locals>.do_test.<locals>.<listcomp>)r&   )rA   Zrect_usecase)tpZseed_valuesr@   )r&   r   r   r   do_test   s    z$TestCMath.test_rect.<locals>.do_test)r	   rK   r#   r.   r    )r   r&   rd   r   )r&   r   r   	test_rect   s    zTestCMath.test_rectc             C   s   | j td d S )N)r&   )re   rM   )r   r   r   r   test_rect_npm   s    zTestCMath.test_rect_npmc             C   s   |  tt d S )N)rX   isnan_usecaserE   )r   r&   r   r   r   
test_isnan   s    zTestCMath.test_isnanrU   c             C   s   |  tt d S )N)rX   rg   rM   )r   r   r   r   test_isnan_npm   s    zTestCMath.test_isnan_npmc             C   s   |  tt d S )N)rX   isinf_usecaserE   )r   r&   r   r   r   
test_isinf   s    zTestCMath.test_isinfc             C   s   |  tt d S )N)rX   rj   rM   )r   r   r   r   test_isinf_npm   s    zTestCMath.test_isinf_npm)      zneeds Python 3.2+c             C   s   |  tt d S )N)rX   isfinite_usecaserE   )r   r&   r   r   r   test_isfinite   s    zTestCMath.test_isfinitec             C   s   |  tt d S )N)rX   ro   rM   )r   r   r   r   test_isfinite_npm   s    zTestCMath.test_isfinite_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   exp_usecaserE   )r   r   r   r   test_exp   s    zTestCMath.test_expc             C   s   | j ttdd d S )Nrn   )r*   )rY   rr   rM   )r   r   r   r   test_exp_npm   s    zTestCMath.test_exp_npmc             C   s   |  tt d S )N)rY   log_usecaserE   )r   r   r   r   test_log   s    zTestCMath.test_logc             C   s   |  tt d S )N)rY   ru   rM   )r   r   r   r   test_log_npm   s    zTestCMath.test_log_npmc             C   sH   t t|  |  }tjtjftjtjfg}| jt|||dd d S )Nrm   )r&   r*   )	rS   r   r   r#   r	   rH   r/   rA   Zlog_base_usecase)r   r&   r@   r?   r   r   r   test_log_base   s
    
zTestCMath.test_log_basec             C   s   | j td d S )N)r&   )rx   rM   )r   r   r   r   test_log_base_npm   s    zTestCMath.test_log_base_npmc             C   s   |  tt d S )N)rY   log10_usecaserE   )r   r   r   r   
test_log10   s    zTestCMath.test_log10c             C   s   |  tt d S )N)rY   rz   rM   )r   r   r   r   test_log10_npm   s    zTestCMath.test_log10_npmc             C   s   |  tt d S )N)rY   sqrt_usecaserE   )r   r   r   r   	test_sqrt   s    zTestCMath.test_sqrtc             C   s:   |  tt dd tddD }| jttjg|td d S )Nc             S   s   g | ]}d |  qS )
   r   )r   ir   r   r   r      s    z+TestCMath.test_sqrt_npm.<locals>.<listcomp>$   )   )r&   )rY   r}   rM   ranger<   r	   rH   )r   r@   r   r   r   test_sqrt_npm   s    zTestCMath.test_sqrt_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   acos_usecaserE   )r   r   r   r   	test_acos   s    zTestCMath.test_acosc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rM   )r   r   r   r   test_acos_npm   s    zTestCMath.test_acos_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   asin_usecaserE   )r   r   r   r   	test_asin   s    zTestCMath.test_asinc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rM   )r   r   r   r   test_asin_npm   s    zTestCMath.test_asin_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   atan_usecaserE   )r   r   r   r   	test_atan  s    zTestCMath.test_atanc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rM   )r   r   r   r   test_atan_npm  s    zTestCMath.test_atan_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   cos_usecaserE   )r   r   r   r   test_cos  s    zTestCMath.test_cosc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rM   )r   r   r   r   test_cos_npm
  s    zTestCMath.test_cos_npmc             C   s   | j ttdd d S )Neps)r+   )rY   sin_usecaserE   )r   r   r   r   test_sin  s    zTestCMath.test_sinc             C   s   | j ttdd d S )Nr   )r+   )rY   r   rM   )r   r   r   r   test_sin_npm  s    zTestCMath.test_sin_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   tan_usecaserE   )r   r   r   r   test_tan  s    zTestCMath.test_tanc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rE   )r   r   r   r   test_tan_npm  s    zTestCMath.test_tan_npmc             C   s   |  tt d S )N)rY   acosh_usecaserE   )r   r   r   r   
test_acosh  s    zTestCMath.test_acoshc             C   s   |  tt d S )N)rY   r   rM   )r   r   r   r   test_acosh_npm  s    zTestCMath.test_acosh_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   asinh_usecaserE   )r   r   r   r   
test_asinh"  s    zTestCMath.test_asinhc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rM   )r   r   r   r   test_asinh_npm%  s    zTestCMath.test_asinh_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   atanh_usecaserE   )r   r   r   r   
test_atanh(  s    zTestCMath.test_atanhc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rM   )r   r   r   r   test_atanh_npm+  s    zTestCMath.test_atanh_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   cosh_usecaserE   )r   r   r   r   	test_cosh.  s    zTestCMath.test_coshc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rM   )r   r   r   r   test_cosh_npm1  s    zTestCMath.test_cosh_npmc             C   s   | j ttdd d S )Nr   )r+   )rY   sinh_usecaserE   )r   r   r   r   	test_sinh4  s    zTestCMath.test_sinhc             C   s   | j ttdd d S )Nr   )r+   )rY   r   rM   )r   r   r   r   test_sinh_npm7  s    zTestCMath.test_sinh_npmc             C   s   | j ttdd d S )Nrn   )r*   )rY   tanh_usecaserE   )r   r   r   r   	test_tanh:  s    zTestCMath.test_tanhc             C   s   | j ttdd d S )Nrn   )r*   )rY   r   rE   )r   r   r   r   test_tanh_npm=  s    zTestCMath.test_tanh_npm)r
   NN):rB   rC   rD   __doc__rX   rY   r[   r\   r^   r_   rE   re   rf   rh   r   ri   rk   rl   unittestZskipIfr   Z	PYVERSIONrp   rq   rs   rt   rv   rw   rx   ry   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   rW      sf    
	
rW   __main__)Z
__future__r   r   r   Zcmathr   r!   r   Znumbar   r   Znumba.compilerr   r   r   r	   Zsupportr   r   Zcomplex_usecasesrE   r=   rM   objectr   rF   rW   rB   mainr   r   r   r   <module>   s$   
<2 @