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   úN/home/ubuntu/veenaModal/venv/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    