B
     \G                 @   s  d Z ddlmZmZmZ ddlZddlZddlm  m	Z
 ddlmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZmZ e ZejZd
d Zdd Zdd Zeejejdd Zeej ejdd Z!ej"dkreej#ejdd Z$eej%ej&ej&dd Z'dd Z(e)dZ*e)dZ+eej,eje(dd Z-eej.eje(dd  Z/eej.ejejd!d" Z0eej1ejd#d$ Z2eej3eje(d%d& Z4eej5eje(d'd( Z6eej7ejd)d* Z8eej9ejd+d, Z:eej;ejd-d. Z<eej=ejd/d0 Z>eej?ejd1d2 Z@eejAejd3d4 ZBeejCejd5d6 ZDeejEejd7d8 ZFeejGejd9d: ZHeejIejd;d< ZJeejKejd=d> ZLeejMejd?d@ ZNeejOejdAdB ZPdS )Cz'
Implement the cmath module functions.
    )print_functionabsolute_importdivisionN)Type)Registryimpl_ret_untracked)typescgutilsutils)	signature   )builtinsmathimplc             C   s   |  d|j|jS )NZuno)Zfcmp_unorderedrealimag)builderz r   6lib/python3.7/site-packages/numba/targets/cmathimpl.pyis_nan   s    r   c             C   s    |  t| |jt| |jS )N)or_r   is_infr   r   )r   r   r   r   r   r      s    r   c             C   s    |  t| |jt| |jS )N)and_r   	is_finiter   r   )r   r   r   r   r   r      s    r   c             C   s8   |j \}|\}| j|||d}t||}t| ||j|S )N)value)argsmake_complexr   r   return_type)contextr   sigr   typr   r   resr   r   r   isnan_float_impl"   s
    
r"   c             C   s8   |j \}|\}| j|||d}t||}t| ||j|S )N)r   )r   r   r   r   r   )r   r   r   r   r    r   r   r!   r   r   r   isinf_float_impl*   s
    
r#   )      c             C   s8   |j \}|\}| j|||d}t||}t| ||j|S )N)r   )r   r   r   r   r   )r   r   r   r   r    r   r   r!   r   r   r   isfinite_float_impl4   s
    
r&   c       
      C   sZ   |\}}t ||}dd }t|jf|jtjf  }| |||||g }	t| |||	S )Nc             S   s   |s$| st | S t| r$t| |S t|}t|}|dkrTt| rT||  }n|| 9 }|dkrxt| rx||  }n|| 9 }t||S )Ng        )absmathisinfcomplexcossin)rphiphi_is_finiter   r   r   r   r   rectD   s    





zrect_impl.<locals>.rect)	r   r   r   r   r   r   booleancompile_internalr   )
r   r   r   r   r-   r.   r/   r0   	inner_sigr!   r   r   r   	rect_impl=   s    
r4   c                s    fdd}|S )Nc          	      s   |j \}|\}| j|||d}|j}|j}t||}	t||}
t|jf|jfd t	j
fd   }| | ||||	|
f}t| |||S )N)r   r%   )r   r   r   r   r   r   r   r   underlying_floatr   r1   r2   r   )r   r   r   r   r    r   r   xyx_is_finitey_is_finiter3   r!   )
inner_funcr   r   wrapper`   s    
z(intrinsic_complex_unary.<locals>.wrapperr   )r:   r;   r   )r:   r   intrinsic_complex_unary_   s    r<   naninfc       	      C   s   |rD|r8t |}t |}t | }t|| || S tttS nt | rh|r\t| | S t| |S n| dkr|rt |}t |}|dkr|| 9 }|dkr|| 9 }t||S t| tS n>|rt | }t |}t |}t|| || S t||S dS )zcmath.exp(x + y j)g        r   N)r(   r+   r,   expr*   NANisnan)	r6   r7   r8   r9   csr-   r   r   r   r   r   exp_implu   s6    










rD   c             C   s(   t t | |}t || }t||S )zcmath.log(x + y j))r(   loghypotatan2r*   )r6   r7   r8   r9   abr   r   r   log_impl   s    rJ   c             C   s.   |\}}dd }|  ||||}t| |||S )zcmath.log(z, base)c             S   s   t | t | S )N)cmathrE   )r   baser   r   r   log_base   s    zlog_base_impl.<locals>.log_base)r2   r   )r   r   r   r   r   rL   rM   r!   r   r   r   log_base_impl   s    rN   c                s.   d  fdd}|  ||||}t| |||S )NgUk@c                s    t | } t| j  | j  S )zcmath.log10(z))rK   rE   r*   r   r   )r   )LN_10r   r   
log10_impl   s    
zlog10_impl.<locals>.log10_impl)r2   r   )r   r   r   r   rP   r!   r   )rO   r   rP      s    rP   c             C   s   t || S )zcmath.phase(x + y j))r(   rG   )r6   r7   r8   r9   r   r   r   
phase_impl   s    rQ   c             C   s   t | |t || fS )zcmath.polar(x + y j))r(   rF   rG   )r6   r7   r8   r9   r   r   r   
polar_impl   s    rR   c       
         s`   d}d| }|j d j}|jdkr(tjntj}||   fdd}| ||||}	t| |||	S )Ng;f?g      ?r   @   c                sZ  | j }| j}|dkr*|dkr*tt||S t|rBtt||S t|rVt||S t|r|dk rtt|| t||S t|t|| |S t| kst| kr|d9 }|d9 }d}nd}|dkr t|t	|| d }|}|d|  }n8t| t	|| d }t|d|  }t||}|rLt|d |S t||S dS )	zcmath.sqrt(z)g        g      ?TFr   g      ?r%   N)
r   r   r*   r'   r(   r)   rA   copysignsqrtrF   )r   rH   rI   Zscaletr   r   )THRESr   r   	sqrt_impl   s6    




zsqrt_impl.<locals>.sqrt_impl)r   r5   Zbitwidthr   ZDBL_MAXFLT_MAXr2   r   )
r   r   r   r   ZSQRT2ZONE_PLUS_SQRT2Z	theargfltMAXrX   r!   r   )rW   r   rX      s    *rX   c             C   s&   dd }|  ||||}t| |||S )Nc             S   s   t t| j | jS )zcmath.cos(z) = cmath.cosh(z j))rK   coshr*   r   r   )r   r   r   r   cos_impl  s    zcos_impl.<locals>.cos_impl)r2   r   )r   r   r   r   r\   r!   r   r   r   r\     s    r\   c             C   s&   dd }|  ||||}t| |||S )Nc             S   s   | j }| j}t|rt|r.t|}|}n:|dkrDt|}|}n$t|t|}t|t|}|dk rv| }t	||S t	t|t
| t|t| S )zcmath.cosh(z)g        )r   r   r(   r)   rA   r'   rT   r+   r,   r*   r[   sinh)r   r6   r7   r   r   r   r   r   	cosh_impl  s     


zcosh_impl.<locals>.cosh_impl)r2   r   )r   r   r   r   r^   r!   r   r   r   r^     s    r^   c             C   s&   dd }|  ||||}t| |||S )Nc             S   s&   t t| j | j}t|j|j S )z#cmath.sin(z) = -j * cmath.sinh(z j))rK   r]   r*   r   r   )r   r-   r   r   r   sin_impl4  s    zsin_impl.<locals>.sin_impl)r2   r   )r   r   r   r   r_   r!   r   r   r   r_   2  s    r_   c             C   s&   dd }|  ||||}t| |||S )Nc             S   s   | j }| j}t|rlt|r*|}|}n8t|}t|}|dkrN||9 }|dkrb|t|9 }t||S tt|t	| t|t
| S )zcmath.sinh(z)g        )r   r   r(   r)   rA   r+   r,   r'   r*   r]   r[   )r   r6   r7   r   r   r   r   r   	sinh_impl>  s    




zsinh_impl.<locals>.sinh_impl)r2   r   )r   r   r   r   r`   r!   r   r   r   r`   <  s    r`   c             C   s&   dd }|  ||||}t| |||S )Nc             S   s&   t t| j | j}t|j|j S )z#cmath.tan(z) = -j * cmath.tanh(z j))rK   tanhr*   r   r   )r   r-   r   r   r   tan_implX  s    ztan_impl.<locals>.tan_impl)r2   r   )r   r   r   r   rb   r!   r   r   r   rb   V  s    rb   c             C   s&   dd }|  ||||}t| |||S )Nc       
      S   s   | j }| j}t|rRtd|}t|r2d}ntdtd| }t||S t|}t|}dt	| }|| }d||  }	t|d||   |	 ||	 | | S )zcmath.tanh(z)g      ?g        g       @)
r   r   r(   r)   rT   r,   r*   ra   tanr[   )
r   r6   r7   r   r   ZtxZtyZcxZtxtyZdenomr   r   r   	tanh_implb  s     




ztanh_impl.<locals>.tanh_impl)r2   r   )r   r   r   r   rd   r!   r   r   r   rd   `  s    rd   c                s@   t d tjd  fdd}| ||||}t| |||S )N   c          	      s   t | jkst | jkrhtt | j| j}ttt| jd | jd   | j }t||S t	
td| j | j }t	
td| j | j}dt|j|j }t|j|j |j|j  }t||S dS )zcmath.acos(z)g      ?g      ?g       @N)r'   r   r   r(   rG   rT   rE   rF   r*   rK   rU   asinh)r   r   r   s1s2)LN_4rW   r   r   	acos_impl  s     

zacos_impl.<locals>.acos_impl)r(   rE   r   rY   r2   r   )r   r   r   r   rj   r!   r   )ri   rW   r   rj   |  s
    

rj   c                s@   t d tjd  fdd}| ||||}t| |||S )Nre   c                s   t | jkst | jkrXtt| jd | jd   }t| j| j}t||S t	t| jd | j}t	t| jd | j}t
|j|j |j|j  }dt|j|j }t||S dS )zcmath.acosh(z)g      ?g      ?g       @N)r'   r   r   r(   rE   rF   rG   r*   rK   rU   rf   )r   r   r   rg   rh   )ri   rW   r   r   
acosh_impl  s    "
zacosh_impl.<locals>.acosh_impl)r(   rE   r   rY   r2   r   )r   r   r   r   rk   r!   r   )ri   rW   r   rk     s
    

rk   c                s@   t d tjd  fdd}| ||||}t| |||S )Nre   c          	      s   t | jkst | jkrfttt| jd | jd   | j}t| jt | j}t||S t	
td| j | j }t	
td| j | j}t|j|j |j|j  }t| j|j|j |j|j  }t||S dS )zcmath.asinh(z)g      ?g      ?N)r'   r   r   r(   rT   rE   rF   rG   r*   rK   rU   rf   )r   r   r   rg   rh   )ri   rW   r   r   
asinh_impl  s     
"zasinh_impl.<locals>.asinh_impl)r(   rE   r   rY   r2   r   )r   r   r   r   rl   r!   r   )ri   rW   r   rl     s
    

rl   c             C   s&   dd }|  ||||}t| |||S )Nc             S   s&   t t| j | j}t|j|j S )z%cmath.asin(z) = -j * cmath.asinh(z j))rK   rf   r*   r   r   )r   r-   r   r   r   	asin_impl  s    zasin_impl.<locals>.asin_impl)r2   r   )r   r   r   r   rm   r!   r   r   r   rm     s    rm   c             C   s&   dd }|  ||||}t| |||S )Nc             S   sP   t t| j | j}t| jr<t| jr<t|j|jS t|j|j S dS )z%cmath.atan(z) = -j * cmath.atanh(z j)N)rK   atanhr*   r   r   r(   r)   rA   )r   r-   r   r   r   	atan_impl  s    zatan_impl.<locals>.atan_impl)r2   r   )r   r   r   r   ro   r!   r   r   r   ro     s    	ro   c                s^   t d}t tjd t tjt jd   fdd}| ||||}t| |||S )Nre   r%   c          	      s  | j dk rd}|  } nd}t| j}t| j sB| j ksB|krt| jr^td| j }n<t| j rpd}n*t| j d | jd }| j d | | }t | j  }n| j dkr|k r|dkrt}| j}n@t	t
|t
t|d  }ttd| d | j}nX|| }d	| j  }td| j  || |  d
 }td| j |d	| j   |  d }t| jrt}|rt| | S t||S dS )zcmath.atanh(z)g        TFg      ?g      @g      ?g       @r%   r   g      ?g       N)r   r'   r   r(   rA   r)   rT   rF   INFrE   rU   rG   Zlog1pr@   r*   )r   negateZayr   hr   ZsqayZzr1)PI_12THRES_LARGETHRES_SMALLr   r   
atanh_impl  s<    


 zatanh_impl.<locals>.atanh_impl)	r(   rE   rU   r   rY   ZFLT_MINZpir2   r   )r   r   r   r   ri   rv   r!   r   )rs   rt   ru   r   rv     s    

,rv   )Q__doc__Z
__future__r   r   r   rK   r(   Zllvmlite.llvmpy.coreZllvmpyZcoreZlcr   Znumba.targets.imputilsr   r   Znumbar   r	   r
   Znumba.typingr    r   r   registrylowerr   r   r   rA   ZComplexr"   r)   r#   Z	PYVERSIONZisfiniter&   r0   ZFloatr4   r<   floatr@   rp   r?   rD   rE   rJ   rN   Zlog10rP   ZphaserQ   ZpolarrR   rU   rX   r+   r\   r[   r^   r,   r_   r]   r`   rc   rb   ra   rd   Zacosrj   Zacoshrk   rf   rl   Zasinrm   Zatanro   rn   rv   r   r   r   r   <module>   sZ   	
	"(=	


