o
    8ήc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mathimpl	cmathimplc                 C   s   |  d|j|jS )Nuno)fcmp_unorderedrealimagbuilderz r   >/tmp/pip-target-vg8gfxp4/lib/python/numba/cpython/cmathimpl.pyis_nan   s   r   c                 C       |  t| |jt| |jS N)or_r   is_infr   r   r   r   r   r   r         r   c                 C   r   r   )and_r   	is_finiter   r   r   r   r   r   r      r   r   c                 C   8   |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   
   
r'   c                 C   r   r   )r   r    r   r   r!   r"   r   r   r   isinf_float_impl&   r(   r)   c                 C   r   r   )r   r    r   r   r!   r"   r   r   r   isfinite_float_impl/   r(   r*   c           
      C   s\   |\}}t ||}dd }t|jg|jtjf R  }| |||||g }	t| |||	S )Nc                 S   s   |s| st | S t| rt| |S t|}t|}|dkr*t| r*||  }n|| 9 }|dkr<t| r<||  }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   r2   r3   r4   r5   	inner_sigr&   r   r   r   	rect_impl8   s   
r9   c                    s    fdd}|S )Nc              	      s   |j \}|\}| j|||d}|j}|j}t||}	t||}
t|jg|jfd t	j
fd  R  }| | ||||	|
f}t| |||S )Nr      )r   r    r   r   r   r   r   r!   underlying_floatr   r6   r7   r   )r#   r   r$   r   r%   r   r   xyx_is_finitey_is_finiter8   r&   
inner_funcr   r   wrapper[   s   

z(intrinsic_complex_unary.<locals>.wrapperr   )rA   rB   r   r@   r   intrinsic_complex_unaryZ   s   rC   naninfc           	      C   s   |r!|rt |}t |}t | }t|| || S tttS t | r2|r-t| | S t| |S | dkr\|rWt |}t |}|dkrJ|| 9 }|dkrR|| 9 }t||S t| tS |rvt | }t |}t |}t|| || S d}t||S )zcmath.exp(x + y j)r+   r   )r-   r0   r1   expr/   NANisnan)	r<   r=   r>   r?   csr2   r   r   r   r   r   exp_implp   s8   














rK   c                 C   s(   t t | |}t || }t||S )zcmath.log(x + y j))r-   loghypotatan2r/   )r<   r=   r>   r?   abr   r   r   log_impl   s   
rQ   c                 C   s.   |\}}dd }|  ||||}t| |||S )zcmath.log(z, base)c                 S   s   t | t | S r   )cmathrL   )r   baser   r   r   log_base   s   zlog_base_impl.<locals>.log_baser7   r   )r#   r   r$   r   r   rS   rT   r&   r   r   r   log_base_impl   s   rV   c                    s.   d  fdd}|  ||||}t| |||S )NgUk@c                    s    t | } t| j  | j  S )zcmath.log10(z))rR   rL   r/   r   r   r   LN_10r   r   
log10_impl   s   
zlog10_impl.<locals>.log10_implrU   )r#   r   r$   r   rZ   r&   r   rX   r   rZ      s   rZ   c                 C   s   t || S )zcmath.phase(x + y j))r-   rN   r<   r=   r>   r?   r   r   r   
phase_impl   s   r\   c                 C   s   t | |t || fS )zcmath.polar(x + y j))r-   rM   rN   r[   r   r   r   
polar_impl   s   r]   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                    sR  | j }| j}|dkr|dkrtt||S t|r!tt||S t|r+t||S t|rL|dk rAtt|| t||S t|t|| |S t| ksXt| krc|d9 }|d9 }d}nd}|dkrt|t	|| d }|}|d|  }nt| t	|| d }t|d|  }t||}|rt|d |S t||S )zcmath.sqrt(z)r+         ?TFr         ?r:   )
r   r   r/   r,   r-   r.   rH   copysignsqrtrM   )r   rO   rP   scaletr   r   THRESr   r   	sqrt_impl   s6   




zsqrt_impl.<locals>.sqrt_impl)r   r;   bitwidthr   DBL_MAXFLT_MAXr7   r   )
r#   r   r$   r   SQRT2ONE_PLUS_SQRT2	theargfltMAXrh   r&   r   rf   r   rh      s   *rh   c                 C   &   dd }|  ||||}t| |||S )Nc                 S   s   t t| j | jS )zcmath.cos(z) = cmath.cosh(z j))rR   coshr/   r   r   rW   r   r   r   cos_impl
  s   zcos_impl.<locals>.cos_implrU   )r#   r   r$   r   rr   r&   r   r   r   rr     s   rr   c                 C   rp   )Nc                 S   s   | j }| j}t|r@t|rt|}|}n|dkr"t|}|}nt|t|}t|t|}|dk r;| }t	||S t	t|t
| t|t| S )zcmath.cosh(z)r+   )r   r   r-   r.   rH   r,   rb   r0   r1   r/   rq   sinhr   r<   r=   r   r   r   r   r   	cosh_impl  s"   


zcosh_impl.<locals>.cosh_implrU   )r#   r   r$   r   ru   r&   r   r   r   ru     s   ru   c                 C   rp   )Nc                 S   &   t t| j | j}t|j|j S )z#cmath.sin(z) = -j * cmath.sinh(z j))rR   rs   r/   r   r   r   r2   r   r   r   sin_impl0     zsin_impl.<locals>.sin_implrU   )r#   r   r$   r   rx   r&   r   r   r   rx   .     rx   c                 C   rp   )Nc                 S   s   | j }| j}t|r6t|r|}|}nt|}t|}|dkr'||9 }|dkr1|t|9 }t||S tt|t	| t|t
| S )zcmath.sinh(z)r+   )r   r   r-   r.   rH   r0   r1   r,   r/   rs   rq   rt   r   r   r   	sinh_impl:  s    




zsinh_impl.<locals>.sinh_implrU   )r#   r   r$   r   r{   r&   r   r   r   r{   8  s   r{   c                 C   rp   )Nc                 S   rv   )z#cmath.tan(z) = -j * cmath.tanh(z j))rR   tanhr/   r   r   rw   r   r   r   tan_implT  ry   ztan_impl.<locals>.tan_implrU   )r#   r   r$   r   r}   r&   r   r   r   r}   R  rz   r}   c                 C   rp   )Nc           
      S   s   | j }| j}t|r)td|}t|rd}ntdtd| }t||S t|}t|}dt	| }|| }d||  }	t|d||   |	 ||	 | | S )zcmath.tanh(z)r^   r+          @)
r   r   r-   r.   rb   r1   r/   r|   tanrq   )
r   r<   r=   r   r   txtycxtxtydenomr   r   r   	tanh_impl^  s"   




ztanh_impl.<locals>.tanh_implrU   )r#   r   r$   r   r   r&   r   r   r   r   \  s   r   c                    @   t d tjd  fdd}| ||||}t| |||S )N   c              	      s   t | jkst | jkr4t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 )zcmath.acos(z)ra   r^   r~   )r,   r   r   r-   rN   rb   rL   rM   r/   rR   rc   asinhr   r   r   s1s2LN_4rg   r   r   	acos_impl}  s    

zacos_impl.<locals>.acos_implr-   rL   r   rk   r7   r   )r#   r   r$   r   r   r&   r   r   r   r   x  
   

r   c                    r   )Nr   c                    s   t | jkst | jkr,t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 )zcmath.acosh(z)ra   r^   r~   )r,   r   r   r-   rL   rM   rN   r/   rR   rc   r   r   r   r   r   
acosh_impl  s   "

zacosh_impl.<locals>.acosh_implr   )r#   r   r$   r   r   r&   r   r   r   r     r   r   c                    r   )Nr   c              	      s   t | jkst | jkr3t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 )zcmath.asinh(z)ra   r^   )r,   r   r   r-   rb   rL   rM   rN   r/   rR   rc   r   r   r   r   r   
asinh_impl  s    
"
zasinh_impl.<locals>.asinh_implr   )r#   r   r$   r   r   r&   r   r   r   r     s
   

r   c                 C   rp   )Nc                 S   rv   )z%cmath.asin(z) = -j * cmath.asinh(z j))rR   r   r/   r   r   rw   r   r   r   	asin_impl  ry   zasin_impl.<locals>.asin_implrU   )r#   r   r$   r   r   r&   r   r   r   r     rz   r   c                 C   rp   )Nc                 S   sL   t t| j | j}t| jrt| jrt|j|jS t|j|j S )z%cmath.atan(z) = -j * cmath.atanh(z j))rR   atanhr/   r   r   r-   r.   rH   rw   r   r   r   	atan_impl  s   zatan_impl.<locals>.atan_implrU   )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 )Nr   r:   c              	      s  | j dk rd}|  } nd}t| j}t| j s!| j ks!|krWt| jr/td| j }nt| j r8d}nt| j d | jd }| j d | | }t | j  }n`| j dkr|k r|dkrjt}| j}nMt	t
|t
t|d  }ttd| d | j}n,|| }d	| j  }td| j  || |  d
 }td| j |d	| j   |  d }t| jrt}|rt| | S t||S )zcmath.atanh(z)r+   TFra   g      @r^   r~   r:      r`   g       )r   r,   r   r-   rH   r.   rb   rM   INFrL   rc   rN   log1prG   r/   )r   negateayr   hr   sqayzr1PI_12THRES_LARGETHRES_SMALLr   r   
atanh_impl  sD   


 
zatanh_impl.<locals>.atanh_impl)	r-   rL   rc   r   rk   FLT_MINpir7   r   )r#   r   r$   r   r   r   r&   r   r   r   r     s   

,r   )F__doc__rR   r-   numba.core.imputilsr   r   
numba.corer   r   numba.core.typingr   numba.cpythonr   r   registrylowerr   r   r   rH   Complexr'   r.   r)   isfiniter*   r5   Floatr9   rC   floatrG   r   rF   rK   rL   rQ   rV   log10rZ   phaser\   polarr]   rc   rh   r0   rr   rq   ru   r1   rx   rs   r{   r   r}   r|   r   acosr   acoshr   r   r   asinr   atanr   r   r   r   r   r   r   <module>   s    



!(


<


	

	




	
