U
    ,dG                     @   s  d Z ddlZddl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mZ ed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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 Z%eej&ejd 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d&d' Z-eej.ejd(d) Z/eej0ejd*d+ Z1eej2ejd,d- Z3eej4ejd.d/ Z5eej6ejd0d1 Z7eej8ejd2d3 Z9eej:ejd4d5 Z;eej<ejd6d7 Z=eej>ejd8d9 Z?eej@ejd:d; ZAeejBejd<d= ZCeejDejd>d? ZEdS )@z'
Implement the cmath module functions.
    N)Registryimpl_ret_untracked)typescgutils)	signature)builtinsmathimplZ	cmathimplc                 C   s   |  d|j|jS )NZuno)Zfcmp_unorderedrealimagbuilderz r   ;/tmp/pip-unpacked-wheel-eu7e0c37/numba/cpython/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      s    r   c                 C   s    |  t| |jt| |jS r   )and_r   	is_finiter	   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 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 r   )r   r   r   r   r   r   r   r   r   isfinite_float_impl/   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 )N        )absmathisinfcomplexcossin)rphiphi_is_finiter	   r
   r   r   r   rect?   s    





zrect_impl.<locals>.rect)	r   r   r   r   r   r   booleancompile_internalr   )
r   r   r   r   r+   r,   r-   r.   	inner_sigr    r   r   r   	rect_impl8   s    
r2   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 )Nr      )r   r   r	   r
   r   r   r   r   underlying_floatr   r/   r0   r   )r   r   r   r   r   r   r   xyx_is_finitey_is_finiter1   r    
inner_funcr   r   wrapper[   s    

z(intrinsic_complex_unary.<locals>.wrapperr   )r:   r;   r   r9   r   intrinsic_complex_unaryZ   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 nB|rt | }t |}t |}t|| || S d}t||S dS )zcmath.exp(x + y j)r$   r   N)r&   r)   r*   expr(   NANisnan)	r5   r6   r7   r8   csr+   r	   r
   r   r   r   exp_implp   s8    










rD   c                 C   s(   t t | |}t || }t||S )zcmath.log(x + y j))r&   loghypotatan2r(   )r5   r6   r7   r8   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 r   )cmathrE   )r   baser   r   r   log_base   s    zlog_base_impl.<locals>.log_baser0   r   )r   r   r   r   r   rL   rM   r    r   r   r   log_base_impl   s    rO   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   ZLN_10r   r   
log10_impl   s    
zlog10_impl.<locals>.log10_implrN   )r   r   r   r   rR   r    r   rQ   r   rR      s    rR   c                 C   s   t || S )zcmath.phase(x + y j))r&   rG   r5   r6   r7   r8   r   r   r   
phase_impl   s    rT   c                 C   s   t | |t || fS )zcmath.polar(x + y j))r&   rF   rG   rS   r   r   r   
polar_impl   s    rU   c           
         s`   d}d| }|j d j}|jdkr(tjntj}||   fdd}| ||||}	t| |||	S )Ng;f?      ?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)r$         ?TFr         ?r3   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   r4   Zbitwidthr   ZDBL_MAXFLT_MAXr0   r   )
r   r   r   r   ZSQRT2ZONE_PLUS_SQRT2Z	theargfltMAXr_   r    r   r]   r   r_      s    *r_   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	   rP   r   r   r   cos_impl
  s    zcos_impl.<locals>.cos_implrN   )r   r   r   r   rc   r    r   r   r   rc     s    rc   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)r$   )r	   r
   r&   r'   rA   r%   rZ   r)   r*   r(   rb   sinhr   r5   r6   r	   r
   r   r   r   	cosh_impl  s"    


zcosh_impl.<locals>.cosh_implrN   )r   r   r   r   rf   r    r   r   r   rf     s    rf   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   rd   r(   r
   r	   r   r+   r   r   r   sin_impl0  s    zsin_impl.<locals>.sin_implrN   )r   r   r   r   rh   r    r   r   r   rh   .  s    rh   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)r$   )r	   r
   r&   r'   rA   r)   r*   r%   r(   rd   rb   re   r   r   r   	sinh_impl:  s     




zsinh_impl.<locals>.sinh_implrN   )r   r   r   r   ri   r    r   r   r   ri   8  s    ri   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	   rg   r   r   r   tan_implT  s    ztan_impl.<locals>.tan_implrN   )r   r   r   r   rk   r    r   r   r   rk   R  s    rk   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)rV   r$          @)
r	   r
   r&   r'   rZ   r*   r(   rj   tanrb   )
r   r5   r6   r	   r
   ZtxtyZcxZtxtyZdenomr   r   r   	tanh_impl^  s"    




ztanh_impl.<locals>.tanh_implrN   )r   r   r   r   ro   r    r   r   r   ro   \  s    ro   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)rY   rV   rl   N)r%   r	   r
   r&   rG   rZ   rE   rF   r(   rK   r[   asinhr   r	   r
   s1s2LN_4r^   r   r   	acos_impl}  s     
zacos_impl.<locals>.acos_implr&   rE   r   r`   r0   r   )r   r   r   r   rw   r    r   ru   r   rw   x  s
    

rw   c                    s@   t d tjd  fdd}| ||||}t| |||S )Nrp   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)rY   rV   rl   N)r%   r	   r
   r&   rE   rF   rG   r(   rK   r[   rq   rr   ru   r   r   
acosh_impl  s    "
zacosh_impl.<locals>.acosh_implrx   )r   r   r   r   ry   r    r   ru   r   ry     s
    

ry   c                    s@   t d tjd  fdd}| ||||}t| |||S )Nrp   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)rY   rV   N)r%   r	   r
   r&   rZ   rE   rF   rG   r(   rK   r[   rq   rr   ru   r   r   
asinh_impl  s     
"zasinh_impl.<locals>.asinh_implrx   )r   r   r   r   rz   r    r   ru   r   rz     s
    

rz   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   rq   r(   r
   r	   rg   r   r   r   	asin_impl  s    zasin_impl.<locals>.asin_implrN   )r   r   r   r   r{   r    r   r   r   r{     s    r{   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   rg   r   r   r   	atan_impl  s    zatan_impl.<locals>.atan_implrN   )r   r   r   r   r}   r    r   r   r   r}     s    	r}   c                    s^   t d}t tjd t tjt jd   fdd}| ||||}t| |||S )Nrp   r3   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)r$   TFrY   g      @rV   rl   r3      rX   g       N)r	   r%   r
   r&   rA   r'   rZ   rF   INFrE   r[   rG   log1pr@   r(   )r   negateZayr	   hr
   ZsqayZzr1ZPI_12ZTHRES_LARGEZTHRES_SMALLr   r   
atanh_impl  sD    


 zatanh_impl.<locals>.atanh_impl)	r&   rE   r[   r   r`   ZFLT_MINpir0   r   )r   r   r   r   rv   r   r    r   r   r   r     s    

,r   )F__doc__rK   r&   Znumba.core.imputilsr   r   Z
numba.corer   r   Znumba.core.typingr   Znumba.cpythonr   r   registrylowerr   r   r   rA   Complexr!   r'   r"   isfiniter#   r.   ZFloatr2   r<   floatr@   r   r?   rD   rE   rJ   rO   log10rR   phaserT   ZpolarrU   r[   r_   r)   rc   rb   rf   r*   rh   rd   ri   rm   rk   rj   ro   acosrw   acoshry   rq   rz   asinr{   atanr}   r|   r   r   r   r   r   <module>   s   



!(


<


	

	




	
