o
    TdP8                     @   s  d dl Z d dlZd dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZ d dlmZ e
 ZejZg Zedd	e jfg7 Zed
de jfg7 Zedde jfg7 Zg Zedde jfg7 Zedde jfg7 Zedde jfg7 Zedde jfg7 Zedde jfg7 Zedde j fg7 Zedde j!fg7 Zedde j"fg7 Zedde j#fg7 Zed d!e j$fg7 Zed"d#e j%fg7 Zed$d%e j&fg7 Zed&d'e j'fg7 Zed(d)e j(fg7 Zed*d+e j)fg7 Zed,d-e j*fg7 Zed.d/e j+fg7 Zed0d1e j,fg7 Zed2d3e j-fg7 Zed4d5e j.fg7 Zed6d7e j/fg7 Zed8d9e j0fg7 Zed:d;e j1fg7 Zed<d=e j2fg7 Zed>d?e j3fg7 Zed@dAe j4fg7 Zi Z5dBe5d/< dCe5d7< dDe5d?< dEe5d< dFe5d%< dGe5d'< dHe5d#< g Z6e6dIdJe j7fg7 Z6e6dKdLe j8fg7 Z6e6dMdNe j9fg7 Z6e6dOdPe j:fg7 Z6e6dQdRe j;fg7 Z6e6dSdTe j<fg7 Z6i Z=dUe=dN< ee jej>ee jej>dVdW Z?eej@ejejdXdY ZAee jej>dZd[ ZBee j/ejCd\d] ZDee j+ejCd^d_ ZEee j%ejCd`da ZFee j'ejCdbdc ZGee j&ejCddde ZHee jejCdfdg ZIee jejCdhdi ZJee jejCdjdk ZKee j$ejCdldm ZLee jejCdndo ZMee j4ejCdpdq ZNdrds ZOdtdu ZPdvdw ZQdxdy ZRdzd{ ZSd|d} ZTd~d ZUdd ZVdd ZWeD ]\ZXZYZZe[eeYZ\e[eeXZ]eOeZee\ eOeZee] qleD ](\ZXZYZZe[eeYZ\e[eeXZ]eReZee\ eReZee] eSeZee] eSeZee] qe6D ](\ZXZYZZe[eeYZ\e[eeXZ]eVeZee\ eVeZee] eWeZee] eWeZee] qdd Z^e^ejej_ e^ejej` dd Zaeaejejb eaejejc dd Zdedejeje edejejf dd Zgegejejh egejeji dd Zjejejejk ejejejl eSe jleejl eSe jleejl dd Zmemejejn emejejo dS )    N)ir)typestypingcgutilstargetconfig)Registry)float32float64int64uint64)	libdevice)cudaisnandisnanfisinfdisinff	isfinitedfinitefceilceilffloorfloorffabsfabsfexpexpfexpm1expm1ferferfferfcerfcftgammatgammaflgammalgammafsqrtsqrtfloglogflog2log2flog10log10flog1plog1pfacoshacoshfacosacosfcoscosfcoshcoshfasinhasinhfasinasinfsinsinfsinhsinhfatanatanfatanhatanhftantanftrunctruncf	fast_cosf	fast_sinf	fast_tanf	fast_expf
fast_log2ffast_log10f	fast_logfcopysign	copysignfatan2atan2fpowpowffmodfmodfhypothypotf	remainder
remainderf	fast_powfc                 C      |  tjdS )Nr   get_constantr   booleancontextbuildersigargs re   f/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/site-packages/numba/cuda/mathimpl.pymath_isinf_isnan_intD   s   rg   c                 C   sx   | j rtttt}| tj|}|||S t||d  | j	
|d W d    n1 s0w   Y  |j| }|S )N   )zdivision by zero)fastmathr   	signaturer   get_functionr   fast_fdividefr   if_zeroerror_modelfp_zero_divisionfdiv)ra   rb   rc   rd   implresre   re   rf   maybe_fast_truedivJ   s   

rs   c                 C   r\   )Nrh   r]   r`   re   re   rf   math_isfinite_intW   s   rt   c                 C      dd }|  ||||S )Nc                 S      t j| S N)r   fp16hsinxre   re   rf   fp16_sin^      zfp16_sin_impl.<locals>.fp16_sincompile_internal)ra   rb   rc   rd   r|   re   re   rf   fp16_sin_impl\      r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hcosrz   re   re   rf   fp16_cosf   r}   zfp16_cos_impl.<locals>.fp16_cosr~   )ra   rb   rc   rd   r   re   re   rf   fp16_cos_impld   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hlogrz   re   re   rf   fp16_logn   r}   zfp16_log_impl.<locals>.fp16_logr~   )ra   rb   rc   rd   r   re   re   rf   fp16_log_impll   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hlog10rz   re   re   rf   
fp16_log10v   r}   z#fp16_log10_impl.<locals>.fp16_log10r~   )ra   rb   rc   rd   r   re   re   rf   fp16_log10_implt   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hlog2rz   re   re   rf   	fp16_log2~   r}   z!fp16_log2_impl.<locals>.fp16_log2r~   )ra   rb   rc   rd   r   re   re   rf   fp16_log2_impl|   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hexprz   re   re   rf   fp16_exp   r}   zfp16_exp_impl.<locals>.fp16_expr~   )ra   rb   rc   rd   r   re   re   rf   fp16_exp_impl   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hfloorrz   re   re   rf   
fp16_floor   r}   z#fp16_floor_impl.<locals>.fp16_floorr~   )ra   rb   rc   rd   r   re   re   rf   fp16_floor_impl   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hceilrz   re   re   rf   	fp16_ceil   r}   z!fp16_ceil_impl.<locals>.fp16_ceilr~   )ra   rb   rc   rd   r   re   re   rf   fp16_ceil_impl   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   hsqrtrz   re   re   rf   	fp16_sqrt   r}   z!fp16_sqrt_impl.<locals>.fp16_sqrtr~   )ra   rb   rc   rd   r   re   re   rf   fp16_sqrt_impl   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   habsrz   re   re   rf   	fp16_fabs   r}   z!fp16_fabs_impl.<locals>.fp16_fabsr~   )ra   rb   rc   rd   r   re   re   rf   fp16_fabs_impl   r   r   c                 C   ru   )Nc                 S   rv   rw   )r   rx   htruncrz   re   re   rf   
fp16_trunc   r}   z#fp16_trunc_impl.<locals>.fp16_truncr~   )ra   rb   rc   rd   r   re   re   rf   fp16_trunc_impl   r   r   c                    s     fdd}t | | d S )Nc                    s4   |   ttj}|||}| ||tjtjS rw   )rk   r   rj   r   int32castr_   )ra   rb   rc   rd   libfunc_implresultlibfunctyre   rf   lower_boolean_impl   s
   
z(impl_boolean.<locals>.lower_boolean_impllower)keyr   r   r   re   r   rf   impl_boolean   s   r   c                        fdd}|S )Nc                    sR    }d }t kr| jrt j}|d urtt|}| |t	}|||S rw   )
r   ri   unarys_fastmathget__name__getattrr   rk   r   rj   ra   rb   rc   rd   actual_libfuncfast_replacementr   r   re   rf   lower_unary_impl   s   


z.get_lower_unary_impl.<locals>.lower_unary_implre   r   r   r   r   re   r   rf   get_lower_unary_impl      r   c                 C   sv   ddt jf}t|g D ]$\}}}| |kr/|tkrtt|}n	|tkr'tt|}t|||  S qtd|  d| d)NtanhtanhfImplementation of  for 
 not found)	mathr   unarysr   r   r   r	   r   RuntimeError)fnr   
tanh_implsfname64fname32r   rq   re   re   rf   get_unary_impl_for_fn_and_ty   s   
r   c                 C   s   t | ||}t| || d S rw   )r   r   r   re   re   rf   
impl_unary   s   r   c                    s    fdd}t | || d S )Nc                    sn   |j d tkr|j}n|j d tkr|j}nd}t|||d t }t	t
t
}|  |}|||gS )Nr   z<Only 64-bit integers are supported for generic unary int ops)rd   r
   sitofpr   uitofp	TypeErrorr   
DoubleTyper   rj   r	   rk   )ra   rb   rc   rd   convertmargr   r   re   rf   lower_unary_int_impl   s   z,impl_unary_int.<locals>.lower_unary_int_implr   )r   r   r   r   re   r   rf   impl_unary_int   s   r   c                    r   )Nc                    sT    }d }t kr| jrt j}|d urtt|}| |t	}|||S rw   )
r   ri   binarys_fastmathr   r   r   r   rk   r   rj   r   r   re   rf   lower_binary_impl   s   

z0get_lower_binary_impl.<locals>.lower_binary_implre   r   r   r   r   re   r   rf   get_lower_binary_impl   r   r   c                 C   sd   t D ]$\}}}| |kr&|tkrtt|}n	|tkrtt|}t|||  S qtd|  d| d)Nr   r   r   )binarysr   r   r   r	   r   r   )r   r   r   r   r   rq   re   re   rf   get_binary_impl_for_fn_and_ty  s   
r   c                 C   s    t | ||}t| ||| d S rw   )r   r   r   re   re   rf   impl_binary  s   r   c                    s     fdd}t | ||| d S )Nc                    sn   |j d tkr|j n|j d tkr|j nd}t| fdd|D }tttt}| 	|}|||S )Nr   z=Only 64-bit integers are supported for generic binary int opsc                    s   g | ]	} |t  qS re   )r   r   ).0r   r   re   rf   
<listcomp>#  s    zBimpl_binary_int.<locals>.lower_binary_int_impl.<locals>.<listcomp>)
rd   r
   r   r   r   r   r   rj   r	   rk   )ra   rb   rc   rd   r   r   r   r   rf   lower_binary_int_impl  s   
z.impl_binary_int.<locals>.lower_binary_int_implr   )r   r   r   r   re   r   rf   impl_binary_int  s   r   c                    &    fdd}t tjtj| d S )Nc                    &   t tj}|  |}|||S rw   r   rj   r   r   rk   )ra   rb   rc   rd   powi_sigr   r   re   rf   lower_pow_impl_intE     
z(impl_pow_int.<locals>.lower_pow_impl_int)r   r   rS   r   r   )r   r   r   re   r   rf   impl_pow_intD     r   c                    s0   t d fdd}ttj| d S )N   c                    "   t }|  |}|||S rw   r   rj   rk   )ra   rb   rc   rd   modf_sigr   r   rettyr   re   rf   lower_modf_implT     
z"impl_modf.<locals>.lower_modf_impl)r   UniTupler   r   modf)r   r   r   re   r   rf   	impl_modfQ  s   r   c                    s4   t t jf fdd}ttj| d S )Nc                    r   rw   r   )ra   rb   rc   rd   	frexp_sigr   r   re   rf   lower_frexp_implc  r   z$impl_frexp.<locals>.lower_frexp_impl)r   Tupler   r   r   frexp)r   r   r   re   r   rf   
impl_frexp`  s   r   c                    r   )Nc                    r   rw   r   )ra   rb   rc   rd   	ldexp_sigr   r   re   rf   lower_ldexp_implp  r   z$impl_ldexp.<locals>.lower_ldexp_impl)r   r   ldexpr   r   )r   r   r   re   r   rf   
impl_ldexpo  r   r   c                    s"    fdd}t tj| d S )Nc                    sR   dd } fdd} fdd}t kr&jr&| }|dkr&| S | S )Nc                  S   s   t   } | jS rw   )r   ConfigStacktopcompute_capability)flagsre   re   rf   get_compute_capability~  s   zBimpl_tanh.<locals>.lower_tanh_impl.<locals>.get_compute_capabilityc                     s"   t } | }| S rw   r   )tanh_sigr   )rd   rb   ra   r   r   re   rf   tanh_impl_libdevice  r   z?impl_tanh.<locals>.lower_tanh_impl.<locals>.tanh_impl_libdevicec                     s0   t t  t  g} t | dd}| S )Nztanh.approx.f32 $0, $1;z=f,f)r   FunctionType	FloatType	InlineAsmcall)fntyasm)rd   rb   re   rf   tanhf_impl_fastmath  s   z?impl_tanh.<locals>.lower_tanh_impl.<locals>.tanhf_impl_fastmath)      )r   ri   )ra   rb   rc   rd   r   r   r  ccr   )rd   rb   ra   rf   lower_tanh_impl}  s   z"impl_tanh.<locals>.lower_tanh_impl)r   r   r   )r   r   r	  re   r   rf   	impl_tanh|  s   r
  c                    sF    fdd}t tj  | t tj  | t t  | d S )Nc                    s    fdd}|  ||||S )Nc                    s   |j dkr|jdkr d d S | j dkr,|j dkr, d d S t| j | j}t||j }t| j| j }||j  }|jdkrc|t||j  }||jt| 7 }| t| t	| d   S )Ng        g      ?y                y              ?)
realimagr   rW   rS   rQ   r   r(   r4   r<   )abvabslenatphasectyftyre   rf   cpow_internal  s   
z3cpow_implement.<locals>.core.<locals>.cpow_internalr~   )ra   rb   rc   rd   r  r  re   rf   core  s   zcpow_implement.<locals>.core)r   operatorrS   ipow)r  r  r  re   r  rf   cpow_implement  s   r  )pr   r  llvmliter   
numba.corer   r   r   r   numba.core.imputilsr   numba.typesr   r	   r
   r   
numba.cudar   numbar   registryr   booleansisnanisinfisfiniter   r   r   r   r   r   r   r    gammar$   r&   r(   r*   r,   r.   r0   r2   r4   r6   r8   r:   r<   r>   r@   rB   rD   rF   r   r   rO   rQ   rS   rU   rW   rY   r   Integerrg   truedivrs   rt   float16r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   impl32impl64r   powifpowir   modffr   r   frexpfr   r   ldexpfr   r
  r   r   r  	complex64
complex128re   re   re   rf   <module>   s   



















		
