o
    TdD                     @   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 ddl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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'd!d" Z(eej)d#d$ Z*eej+d%d& Z,eej-ejd'd( Z.eej/ejd)d* Z0eej1d+d, Z2eej3ejd-d. Z4eej5d/d0 Z6eej7ejd1d2 Z8eej9d3d4 Z:eej;ejd5d6 Z<eej=d7d8 Z>eej?ejd9d: Z@eejAejd;d< ZBeejCejd=d> ZDeejEejd?d@ ZFdS )Az'
Implement the cmath module functions.
    N)Registryimpl_ret_untracked)typescgutils)	signature)builtinsmathimpl)overload	cmathimplc                 C   s   |  d|j|jS )Nuno)fcmp_unorderedrealimagbuilderz r   j/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/site-packages/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_impl0   r)   r+   c                 C   s&   t dd | |fD rdd }|S d S )Nc                 S   s   g | ]}t |tjqS r   )
isinstancer   Float).0r&   r   r   r   
<listcomp>;   s    z#impl_cmath_rect.<locals>.<listcomp>c                 S   s   t |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        )mathisfiniteabsisinfcomplexcossin)rphir   r   r   r   r   impl<   s   







zimpl_cmath_rect.<locals>.impl)all)r8   r9   r:   r   r   r   impl_cmath_rect9   s   r<   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   booleancompile_internalr   )r$   r   r%   r    r&   r   r   xyx_is_finitey_is_finite	inner_sigr'   
inner_funcr   r   wrapperU   s   

z(intrinsic_complex_unary.<locals>.wrapperr   )rG   rH   r   rF   r   intrinsic_complex_unaryT   s   rI   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)r0   r   )r1   r6   r7   expr5   NANisnan)	rA   rB   rC   rD   csr8   r   r   r   r   r   exp_implj   s8   














rQ   c                 C   s(   t t | |}t || }t||S )zcmath.log(x + y j))r1   loghypotatan2r5   )rA   rB   rC   rD   abr   r   r   log_impl   s   
rW   c                 C   s.   |\}}dd }|  ||||}t| |||S )zcmath.log(z, base)c                 S   s   t | t | S r   )cmathrR   )r   baser   r   r   log_base   s   zlog_base_impl.<locals>.log_baser@   r   )r$   r   r%   r    r   rY   rZ   r'   r   r   r   log_base_impl   s   r\   c                    s$   t | tjsd S d  fdd}|S )NgUk@c                    s    t | } t| j  | j  S )zcmath.log10(z))rX   rR   r5   r   r   r   LN_10r   r   
log10_impl   s   
z$impl_cmath_log10.<locals>.log10_implr,   r   Complex)r   r`   r   r^   r   impl_cmath_log10   s
   rc   c                 C   s   t | tjsdS dd }|S )zcmath.phase(x + y j)Nc                 S   s   t | j| jS r   )r1   rT   r   r   )rA   r   r   r   r:      s   zphase_impl.<locals>.implra   rA   r:   r   r   r   
phase_impl   s   re   c                 C      t | tjsd S dd }|S )Nc                 S   s&   | j | j}}t||t||fS r   )r   r   r1   rS   rT   )rA   r8   ir   r   r   r:      s   zpolar_impl.<locals>.implra   rd   r   r   r   
polar_impl   s   rh   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)r0         ?TFr         ?r=   )
r   r   r5   r3   r1   r4   rN   copysignsqrtrS   )r   rU   rV   scaletr   r   THRESr   r   	sqrt_impl   s6   




zsqrt_impl.<locals>.sqrt_impl)r    r>   bitwidthr   DBL_MAXFLT_MAXr@   r   )
r$   r   r%   r    SQRT2ONE_PLUS_SQRT2	theargfltMAXrs   r'   r   rq   r   rs      s   *rs   c                 C   &   dd }|  ||||}t| |||S )Nc                 S   s   t t| j | jS )zcmath.cos(z) = cmath.cosh(z j))rX   coshr5   r   r   r]   r   r   r   cos_impl  s   zcos_impl.<locals>.cos_implr[   )r$   r   r%   r    r}   r'   r   r   r   r}     s   r}   c                 C   rf   )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)r0   )r   r   r1   r4   rN   r3   rm   r6   r7   r5   r|   sinhr   rA   rB   r   r   r   r   r   	cosh_impl  s"   


z"impl_cmath_cosh.<locals>.cosh_implra   )r   r   r   r   r   impl_cmath_cosh     r   c                 C   r{   )Nc                 S   &   t t| j | j}t|j|j S )z#cmath.sin(z) = -j * cmath.sinh(z j))rX   r~   r5   r   r   r   r8   r   r   r   sin_impl7     zsin_impl.<locals>.sin_implr[   )r$   r   r%   r    r   r'   r   r   r   r   5     r   c                 C   rf   )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)r0   )r   r   r1   r4   rN   r6   r7   r3   r5   r~   r|   r   r   r   r   	sinh_implD  s    




z"impl_cmath_sinh.<locals>.sinh_implra   )r   r   r   r   r   impl_cmath_sinh?  s   r   c                 C   r{   )Nc                 S   r   )z#cmath.tan(z) = -j * cmath.tanh(z j))rX   tanhr5   r   r   r   r   r   r   tan_impl\  r   ztan_impl.<locals>.tan_implr[   )r$   r   r%   r    r   r'   r   r   r   r   Z  r   r   c                 C   rf   )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)ri   r0          @)
r   r   r1   r4   rm   r7   r5   r   tanr|   )
r   rA   rB   r   r   txtycxtxtydenomr   r   r   	tanh_implj  s"   




z"impl_cmath_tanh.<locals>.tanh_implra   )r   r   r   r   r   impl_cmath_tanhe  r   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)rl   ri   r   )r3   r   r   r1   rT   rm   rR   rS   r5   rX   rn   asinhr   r   r   s1s2LN_4rr   r   r   	acos_impl  s    

zacos_impl.<locals>.acos_implr1   rR   r   rv   r@   r   )r$   r   r%   r    r   r'   r   r   r   r     s
   

r   c                    s6   t | tjsd S td tjd  fdd}|S )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)rl   ri   r   )r3   r   r   r1   rR   rS   rT   r5   rX   rn   r   r   r   r   r   
acosh_impl  s   "

z$impl_cmath_acosh.<locals>.acosh_impl)r,   r   rb   r1   rR   r   rv   )r   r   r   r   r   impl_cmath_acosh  s   

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)rl   ri   )r3   r   r   r1   rm   rR   rS   rT   r5   rX   rn   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   r{   )Nc                 S   r   )z%cmath.asin(z) = -j * cmath.asinh(z j))rX   r   r5   r   r   r   r   r   r   	asin_impl  r   zasin_impl.<locals>.asin_implr[   )r$   r   r%   r    r   r'   r   r   r   r     r   r   c                 C   r{   )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))rX   atanhr5   r   r   r1   r4   rN   r   r   r   r   	atan_impl  s   zatan_impl.<locals>.atan_implr[   )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)r0   TFrl   g      @ri   r   r=      rk   g       )r   r3   r   r1   rN   r4   rm   rS   INFrR   rn   rT   log1prM   r5   )r   negateayr   hr   sqayzr1PI_12THRES_LARGETHRES_SMALLr   r   
atanh_impl  sD   


 
zatanh_impl.<locals>.atanh_impl)	r1   rR   rn   r   rv   FLT_MINpir@   r   )r$   r   r%   r    r   r   r'   r   r   r   r     s   

,r   )G__doc__rX   r1   numba.core.imputilsr   r   
numba.corer   r   numba.core.typingr   numba.cpythonr   r   numba.core.extendingr	   registrylowerr   r   r   rN   rb   r(   r4   r*   r2   r+   rectr<   rI   floatrM   r   rL   rQ   rR   rW   r\   log10rc   phasere   polarrh   rn   rs   r6   r}   r|   r   r7   r   r~   r   r   r   r   r   acosr   acoshr   r   r   asinr   atanr   r   r   r   r   r   r   <module>   s    



(





<


	







	
