o
    ۾i[                     @   sD   d Z ddlZddlZddlmZ ddlmZ dd Zedd Z	dS )	aD  Contains information on how to translate different ufuncs for the CUDA
target. It is a database of different ufuncs and how each of its loops maps to
a function that implements the inner kernel of that ufunc (the inner kernel
being the per-element function).

Use get_ufunc_info() to get the information related to a ufunc.
    N)	lru_cache)typingc                 C   s
   t  |  S N)ufunc_db)	ufunc_key r   E/home/ubuntu/.local/lib/python3.10/site-packages/numba/cuda/ufuncs.pyget_ufunc_info   s   
r	   c                     sl	  ddl m} m}m} ddlm ddlm} ddlm	m
  fdd fdd	fd
d}fdd}fdd}fddfddfdd}fdd}fdd}	fdd}
fdd}fdd}fd d!fd"d#}fd$d%fd&d'}fd(d)}fd*d+}fd,d-}fd.d/}fd0d1}i }jjd2|tj< jjd2|tj< ||| j| jd2|tj< ||| j| jd2|tj< |	|	| j| jd2|tj< |
|
| j| jd2|tj< ||d3|tj< ||d3|tj< ||d2|tj< ||d2|tj< ||||d2|tj< ||| j| jd2|tj< ||jjd2|tj < ||| j!| j!d2|tj"< |j#|j#d4|tj$< |tj$ |tj%< |j&|j&d4|tj'< |tj' |tj(< |j)|j*|j)|j*|j)|j*|j)|j*|j)|j*|j)|j+|j+j,j,d5|tj-< |d6kr|tj- .|/d7|0d7d8 |j1|j2|j1|j2|j1|j2|j1|j2|j1|j2|j1|j3|j3j4j4d5|tj5< |d6kr|tj5 .|/d9|0d9d8 |j6|j7|j6|j7|j6|j7|j6|j7|j6|j7|j6|j8|j8j9j9d5|tj:< |d6kr|tj: .|/d:|0d:d8 |j;|j<|j;|j<|j;|j<|j;|j<|j;|j<|j;|j=|j=j>j>d5|tj?< |d6krX|tj? .|/d;|0d;d8 |j@|j@|j@|j@|j@|j@|j@|j@|j@|j@|j@|jA|jAjBjBd5|tjC< |d6kr|tjC .|/d<|0d<d8 |jD|jD|jD|jD|jD|jD|jD|jD|jD|jD|jD|jE|jEjFjFd5|tjG< |d6kr|tjG .|/d=|0d=d8 jHjHjHjHjHjHjHjHjHjHjHjHjHjIjId5|tjJ< jKjKjKjKjKjKjKjKjKjKjKjKjKjLjLd5|tjM< jNjNjNjNjNjNjNjNjNjNjNjNjNjOjOd5|tjP< jQjQjQjQjQjQjQjQjQjQjQjQjQjRjRd>|tjS< jKjTjUjTjUjTjUjTjUjTjUjVjVjWjWd?|tjX< jHjYjZjYjZjYjZjYjZjYjZj[j[j\j\d?|tj]< jKjTjUjTjUjTjUjTjUjTjUj^j^j_j_d?|tj`< jHjYjZjYjZjYjZjYjZjYjZjajajbjbd?|tjc< |jd|jd|jd|jd|jd|jd|jd|jd|jd|jd|jdd@|tje< |jf|jf|jf|jf|jf|jf|jf|jf|jf|jf|jfd@|tjg< |jh|jh|jh|jh|jh|jh|jh|jh|jh|jh|jhd@|tji< |jj|jj|jj|jj|jj|jj|jj|jj|jj|jj|jjdA|tjk< |jl|jl|jl|jl|jl|jl|jl|jl|jl|jldB
|tjm< |jn|jn|jn|jn|jn|jn|jn|jn|jn|jndB
|tjo< ||jpjpd2|tjq< ||jrjrd2|tjs< ||jtjtd2|tju< |S )CNr   )	cmathimplmathimplnumbers)npyfuncs)numpy_version)get_unary_impl_for_fn_and_tyget_binary_impl_for_fn_and_tyc                    ,    ||d  | |jd }|||||S )N   r   _check_arity_and_homogeneityargsfncontextbuildersigr   impl)r   r   r   r   np_unary_impl      zufunc_db.<locals>.np_unary_implc                    r   )N   r   r   r   )r   r   r   r   np_binary_impl!   r   z ufunc_db.<locals>.np_binary_implc                        t j| |||S r   )mathlogr   r   r   r   r   r   r   np_real_log_impl&      z"ufunc_db.<locals>.np_real_log_implc                    r    r   )r!   log2r#   r$   r   r   np_real_log2_impl)   r&   z#ufunc_db.<locals>.np_real_log2_implc                    r    r   )r!   log10r#   r$   r   r   np_real_log10_impl,   r&   z$ufunc_db.<locals>.np_real_log10_implc                    r    r   )r!   sinr#   r$   r   r   np_real_sin_impl/   r&   z"ufunc_db.<locals>.np_real_sin_implc                    r    r   )r!   cosr#   r$   r   r   np_real_cos_impl2   r&   z"ufunc_db.<locals>.np_real_cos_implc                    r    r   )r!   tanr#   r$   r   r   np_real_tan_impl5   r&   z"ufunc_db.<locals>.np_real_tan_implc                    r    r   )r!   asinr#   r$   r   r   np_real_asin_impl8   r&   z#ufunc_db.<locals>.np_real_asin_implc                    r    r   )r!   acosr#   r$   r   r   np_real_acos_impl;   r&   z#ufunc_db.<locals>.np_real_acos_implc                    r    r   )r!   atanr#   r$   r   r   np_real_atan_impl>   r&   z#ufunc_db.<locals>.np_real_atan_implc                    r    r   )r!   atan2r#   r   r   r   np_real_atan2_implA   r&   z$ufunc_db.<locals>.np_real_atan2_implc                    r    r   )r!   hypotr#   r8   r   r   np_real_hypot_implD   r&   z$ufunc_db.<locals>.np_real_hypot_implc                    r    r   )r!   sinhr#   r$   r   r   np_real_sinh_implG   r&   z#ufunc_db.<locals>.np_real_sinh_implc                    s    ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
| |||
g}| |||	g} | |||
g}| |||	g}||||_||||_|	 S Nr   r   r   
r   r   underlying_floatr   	signaturemake_complexrealimagfmul	_getvalue)r   r   r   r   tyftyfsig1xoutxrxisxishxrcxichxrr.   np_real_cosh_implr,   r=   r   r   r   np_complex_sinh_implJ      
z&ufunc_db.<locals>.np_complex_sinh_implc                    r    r   )r!   coshr#   r$   r   r   rS   a   r&   z#ufunc_db.<locals>.np_real_cosh_implc                    s    ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
 | |||
g}| |||	g}| |||
g}| |||	g}||||_||||_|	 S r>   r?   )r   r   r   r   rG   rH   rI   rJ   rK   rL   rM   rP   rQ   rN   rO   rR   r   r   np_complex_cosh_impld   rU   z&ufunc_db.<locals>.np_complex_cosh_implc                    r    r   )r!   tanhr#   r$   r   r   np_real_tanh_impl{   r&   z#ufunc_db.<locals>.np_real_tanh_implc                    sp   ||d |jd }|j}tj|gd  }| |d}| |||d }| ||}	|j}
|j}| |||g} | |||g}| |||
g}| |||
g}|	||}|	||}|	||}|	||}|	||}|	||}|
||}|||}|	||}|	||}|	||}|	||}|
||}|||}|	|||	_|	|||	_|	 S )Nr   r   r   g      ?)r   r   r@   r   rA   get_constantrB   rC   rD   rE   faddfdivfsubrF   )r   r   r   r   rG   rH   rI   ONErJ   rK   rL   rM   sicishrchr_rsis_rcicsqr_rcsqr_icdinv_drs_rcis_icis_rcrs_icnumrnumirR   r   r   np_complex_tanh_impl~   s<   
z&ufunc_db.<locals>.np_complex_tanh_implc                    r    r   )r!   asinhr#   r$   r   r   np_real_asinh_impl   r&   z$ufunc_db.<locals>.np_real_asinh_implc                    r    r   )r!   acoshr#   r$   r   r   np_real_acosh_impl   r&   z$ufunc_db.<locals>.np_real_acosh_implc                    r    r   )r!   atanhr#   r$   r   r   np_real_atanh_impl   r&   z$ufunc_db.<locals>.np_real_atanh_impl)f->fd->dzF->FzD->D)ff->fdd->d)rx   ry   )??->?zbb->?zBB->?zhh->?zHH->?zii->?zII->?zll->?zLL->?zqq->?zQQ->?zff->?zdd->?zFF->?zDD->?)r      >)zqQ->?zQq->?z>=<z<=z!=z==)?->?zb->?zB->?zh->?zH->?zi->?zI->?zl->?zL->?zq->?zQ->?zf->?zd->?zF->?zD->?)r|   bb->bBB->Bhh->hHH->Hii->iII->Ill->lLL->Lqq->qQQ->Qrz   r{   zFF->FzDD->D)r|   r   r   r   r   r   r   r   r   r   r   )r   zb->bzB->Bzh->hzH->Hzi->izI->Izl->lzL->Lzq->qzQ->Q)
r   r   r   r   r   r   r   r   r   r   )vnumba.cpythonr
   r   r   numba.npr   numba.np.numpy_supportr   numba.cuda.mathimplr   r   np_complex_sin_implnpr+   np_complex_cos_implr-   tan_implr/   	asin_implarcsin	acos_implarccos	atan_implarctanarctan2r:   r<   rV   rX   
asinh_implarcsinhnp_complex_acosh_implarccosh
atanh_implarctanhradians_float_impldeg2radradiansdegrees_float_implrad2degdegreesint_ugt_implint_sgt_implreal_gt_implnp_complex_gt_implgreaterupdateint_signed_unsigned_cmpint_unsigned_signed_cmpint_uge_implint_sge_implreal_ge_implnp_complex_ge_implgreater_equalint_ult_implint_slt_implreal_lt_implnp_complex_lt_impllessint_ule_implint_sle_implreal_le_implnp_complex_le_impl
less_equalint_ne_implreal_ne_implnp_complex_ne_impl	not_equalint_eq_implreal_eq_implnp_complex_eq_implequalnp_logical_and_implnp_complex_logical_and_impllogical_andnp_logical_or_implnp_complex_logical_or_impl
logical_ornp_logical_xor_implnp_complex_logical_xor_impllogical_xornp_logical_not_implnp_complex_logical_not_impllogical_notnp_int_smax_implnp_int_umax_implnp_real_maximum_implnp_complex_maximum_implmaximumnp_int_smin_implnp_int_umin_implnp_real_minimum_implnp_complex_minimum_implminimumnp_real_fmax_implnp_complex_fmax_implfmaxnp_real_fmin_implnp_complex_fmin_implfminint_and_implbitwise_andint_or_impl
bitwise_orint_xor_implbitwise_xorint_invert_implinvertint_shl_impl
left_shiftint_shr_implright_shiftnp_complex_log_implr"   np_complex_log2_implr'   np_complex_log10_implr)   )r
   r   r   r   r%   r(   r*   r0   r2   r4   r6   r9   r;   rT   rW   rY   rq   rs   ru   rw   dbr   )	r   r   r   r.   rS   r,   r=   r   r   r   r      sr  &











r   )
__doc__r!   numpyr   	functoolsr   
numba.corer   r	   r   r   r   r   r   <module>   s    