o
    ç0 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)Z	ufunc_key© r   ú]/home/app/PaddleOCR-VL-test/.venv_paddleocr/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"   r7   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   rR   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   rF   rG   rH   rI   rJ   rK   rL   rO   rP   rM   rN   rQ   r   r   Únp_complex_cosh_impld   rT   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   r@   Zget_constantrA   rB   rC   rD   ZfaddZfdivZfsubrE   )r   r   r   r   rF   rG   rH   ZONErI   rJ   rK   rL   ÚsiÚciZshrZchr_ÚrsÚis_ÚrcZicZsqr_rcZsqr_icÚdZinv_dZrs_rcZis_icZis_rcZrs_icZnumrZnumirQ   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)rf   rg   )ú??->?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->?)rj   úbb->búBB->Búhh->húHH->Húii->iúII->Iúll->lúLL->Lúqq->qúQQ->Qrh   ri   zFF->FzDD->D)rj   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   )rn   zb->bzB->Bzh->hzH->Hzi->izI->Izl->lzL->Lzq->qzQ->Q)
ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   )vZnumba.cpythonr	   r
   r   Znumba.npr   Znumba.np.numpy_supportr   Znumba.cuda.mathimplr   r   Znp_complex_sin_implÚnpr*   Znp_complex_cos_implr,   Ztan_implr.   Z	asin_implZarcsinZ	acos_implZarccosZ	atan_implZarctanZarctan2r9   r;   rU   rW   Z
asinh_implZarcsinhZnp_complex_acosh_implZarccoshZ
atanh_implZarctanhZradians_float_implZdeg2radÚradiansZdegrees_float_implZrad2degÚdegreesZint_ugt_implZint_sgt_implZreal_gt_implZnp_complex_gt_implZgreaterÚupdateZint_signed_unsigned_cmpZint_unsigned_signed_cmpZint_uge_implZint_sge_implZreal_ge_implZnp_complex_ge_implZgreater_equalZint_ult_implZint_slt_implZreal_lt_implZnp_complex_lt_implÚlessZint_ule_implZint_sle_implZreal_le_implZnp_complex_le_implZ
less_equalZint_ne_implZreal_ne_implZnp_complex_ne_implÚ	not_equalZint_eq_implZreal_eq_implZnp_complex_eq_implÚequalZnp_logical_and_implZnp_complex_logical_and_implÚlogical_andZnp_logical_or_implZnp_complex_logical_or_implÚ
logical_orZnp_logical_xor_implZnp_complex_logical_xor_implÚlogical_xorZnp_logical_not_implZnp_complex_logical_not_implZlogical_notZnp_int_smax_implZnp_int_umax_implZnp_real_maximum_implZnp_complex_maximum_implÚmaximumZnp_int_smin_implZnp_int_umin_implZnp_real_minimum_implZnp_complex_minimum_implÚminimumZnp_real_fmax_implZnp_complex_fmax_implZfmaxZnp_real_fmin_implZnp_complex_fmin_implZfminZint_and_implZbitwise_andZint_or_implZ
bitwise_orZint_xor_implZbitwise_xorZint_invert_implÚinvertZint_shl_implZ
left_shiftZint_shr_implZright_shiftZnp_complex_log_implr!   Znp_complex_log2_implr&   Znp_complex_log10_implr(   )r	   r
   r   r   r$   r'   r)   r/   r1   r3   r5   r8   r:   rS   rV   rX   r_   ra   rc   re   Údbr   )	r   r   r   r-   rR   r+   r<   r   r   r   r      sr  &üüüüüüþþüüüüüüþþñ

þñ

þñ

þñ

þñ

þñ

þññññññññõõõõööüüür   )
Ú__doc__r    Únumpyry   Ú	functoolsr   Z
numba.corer   r   r   r   r   r   r   Ú<module>   s    