o
    ‘i]W  ã                   @   sT   d Z ddlZddlZddlmZ ddlmZ ddlm	Z	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)Útyping)Úget_unary_impl_for_fn_and_tyÚget_binary_impl_for_fn_and_tyc                 C   s
   t ƒ |  S ©N)Úufunc_db)Z	ufunc_key© r   ú`/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/cuda/ufuncs.pyÚget_ufunc_info   s   
r
   c                     sì  ddl m} m}m} ddlm‰ ddl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*„}i }ˆˆˆjˆjd+œ|t	j
< ˆˆˆjˆjd+œ|t	j< ||| j| jd+œ|t	j< ||| j| jd+œ|t	j< ||| j| jd+œ|t	j< ||| j| jd+œ|t	j< ||d,œ|t	j< |	|	d,œ|t	j< ˆˆ|
|
d+œ|t	j< ˆˆ||d+œ|t	j< ||||d+œ|t	j< ||| j| jd+œ|t	j< ||ˆjˆjd+œ|t	j< ||| j| jd+œ|t	j< |j |j d-œ|t	j!< |t	j! |t	j"< |j#|j#d-œ|t	j$< |t	j$ |t	j%< |j&|j'|j&|j'|j&|j'|j&|j'|j&|j'|j&|j(|j(ˆj)ˆj)d.œ|t	j*< |d/krŽ|t	j*  +| ,d0¡| -d0¡d1œ¡ |j.|j/|j.|j/|j.|j/|j.|j/|j.|j/|j.|j0|j0ˆj1ˆj1d.œ|t	j2< |d/krÈ|t	j2  +| ,d2¡| -d2¡d1œ¡ |j3|j4|j3|j4|j3|j4|j3|j4|j3|j4|j3|j5|j5ˆj6ˆj6d.œ|t	j7< |d/kr|t	j7  +| ,d3¡| -d3¡d1œ¡ |j8|j9|j8|j9|j8|j9|j8|j9|j8|j9|j8|j:|j:ˆj;ˆj;d.œ|t	j<< |d/kr<|t	j<  +| ,d4¡| -d4¡d1œ¡ |j=|j=|j=|j=|j=|j=|j=|j=|j=|j=|j=|j>|j>ˆj?ˆj?d.œ|t	j@< |d/krv|t	j@  +| ,d5¡| -d5¡d1œ¡ |jA|jA|jA|jA|jA|jA|jA|jA|jA|jA|jA|jB|jBˆjCˆjCd.œ|t	jD< |d/kr°|t	jD  +| ,d6¡| -d6¡d1œ¡ ˆjEˆjEˆjEˆjEˆjEˆjEˆjEˆjEˆjEˆjEˆjEˆjEˆjEˆjFˆjFd.œ|t	jG< ˆjHˆjHˆjHˆjHˆjHˆjHˆjHˆjHˆjHˆjHˆjHˆjHˆjHˆjIˆjId.œ|t	jJ< ˆjKˆjKˆjKˆjKˆjKˆjKˆjKˆjKˆjKˆjKˆjKˆjKˆjKˆjLˆjLd.œ|t	jM< ˆjNˆjNˆjNˆjNˆjNˆjNˆjNˆjNˆjNˆjNˆjNˆjNˆjNˆjOˆjOd7œ|t	jP< ˆjHˆjQˆjRˆjQˆjRˆjQˆjRˆjQˆjRˆjQˆjRˆjSˆjSˆjTˆjTd8œ|t	jU< ˆjEˆjVˆjWˆjVˆjWˆjVˆjWˆjVˆjWˆjVˆjWˆjXˆjXˆjYˆjYd8œ|t	jZ< ˆjHˆjQˆjRˆjQˆjRˆjQˆjRˆjQˆjRˆjQˆjRˆj[ˆj[ˆj\ˆj\d8œ|t	j]< ˆjEˆjVˆjWˆjVˆjWˆjVˆjWˆjVˆjWˆjVˆjWˆj^ˆj^ˆj_ˆj_d8œ|t	j`< |ja|ja|ja|ja|ja|ja|ja|ja|ja|ja|jad9œ|t	jb< |jc|jc|jc|jc|jc|jc|jc|jc|jc|jc|jcd9œ|t	jd< |je|je|je|je|je|je|je|je|je|je|jed9œ|t	jf< |jg|jg|jg|jg|jg|jg|jg|jg|jg|jg|jgd:œ|t	jh< |ji|ji|ji|ji|ji|ji|ji|ji|ji|jid;œ
|t	jj< |jk|jk|jk|jk|jk|jk|jk|jk|jk|jkd;œ
|t	jl< |S )<Nr   )Ú	cmathimplÚmathimplÚnumbers©Únpyfuncs)Únumpy_versionc                    ó,   ˆ   ||d¡ t| |jd ƒ}|||||ƒS )Né   r   )Ú_check_arity_and_homogeneityr   Úargs©ÚfnÚcontextÚbuilderÚsigr   Úimplr   r   r	   Únp_unary_impl   ó   zufunc_db.<locals>.np_unary_implc                    r   )Né   r   )r   r   r   r   r   r   r	   Únp_binary_impl!   r   z ufunc_db.<locals>.np_binary_implc                    ó   ˆ t j| |||ƒS r   )ÚmathÚsin©r   r   r   r   ©r   r   r	   Únp_real_sin_impl&   ó   z"ufunc_db.<locals>.np_real_sin_implc                    r   r   )r    Úcosr"   r#   r   r	   Únp_real_cos_impl)   r%   z"ufunc_db.<locals>.np_real_cos_implc                    r   r   )r    Útanr"   r#   r   r	   Únp_real_tan_impl,   r%   z"ufunc_db.<locals>.np_real_tan_implc                    r   r   )r    Úasinr"   r#   r   r	   Únp_real_asin_impl/   r%   z#ufunc_db.<locals>.np_real_asin_implc                    r   r   )r    Úacosr"   r#   r   r	   Únp_real_acos_impl2   r%   z#ufunc_db.<locals>.np_real_acos_implc                    r   r   )r    Úatanr"   r#   r   r	   Únp_real_atan_impl5   r%   z#ufunc_db.<locals>.np_real_atan_implc                    r   r   )r    Úatan2r"   ©r   r   r	   Únp_real_atan2_impl8   r%   z$ufunc_db.<locals>.np_real_atan2_implc                    r   r   )r    Úhypotr"   r1   r   r	   Únp_real_hypot_impl;   r%   z$ufunc_db.<locals>.np_real_hypot_implc                    r   r   )r    Úsinhr"   r#   r   r	   Únp_real_sinh_impl>   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$   r6   r   r   r	   Únp_complex_sinh_implA   ó   
z&ufunc_db.<locals>.np_complex_sinh_implc                    r   r   )r    Úcoshr"   r#   r   r	   rL   X   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 r7   r8   )r   r   r   r   r@   rA   rB   rC   rD   rE   rF   rI   rJ   rG   rH   rK   r   r	   Únp_complex_cosh_impl[   rN   z&ufunc_db.<locals>.np_complex_cosh_implc                    r   r   )r    Útanhr"   r#   r   r	   Únp_real_tanh_implr   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   r9   r   r:   Zget_constantr;   r<   r=   r>   ZfaddZfdivZfsubr?   )r   r   r   r   r@   rA   rB   ZONErC   rD   rE   rF   ÚsiÚciZshrZchr_ÚrsÚis_ÚrcZicZsqr_rcZsqr_icÚdZinv_dZrs_rcZis_icZis_rcZrs_icZnumrZnumirK   r   r	   Únp_complex_tanh_implu   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)r`   ra   )ú??->?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->?)rd   úbb->búBB->Búhh->húHH->Húii->iúII->Iúll->lúLL->Lúqq->qúQQ->Qrb   rc   zFF->FzDD->D)rd   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   )rh   zb->bzB->Bzh->hzH->Hzi->izI->Izl->lzL->Lzq->qzQ->Q)
ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   )mZnumba.cpythonr   r   r   Znumba.npr   Znumba.np.numpy_supportr   Znp_complex_sin_implÚnpr!   Znp_complex_cos_implr&   Ztan_implr(   Z	asin_implZarcsinZ	acos_implZarccosZ	atan_implZarctanZarctan2r3   r5   rO   rQ   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_shift)r   r   r   r   r)   r+   r-   r/   r2   r4   rM   rP   rR   rY   r[   r]   r_   Údbr   )r   r'   rL   r$   r6   r   r   r	   r      sL  &üüüüüüþþüüüüüüþþñ

þñ

þñ

þñ

þñ

þñ

þññññññññõõõõöör   )Ú__doc__r    Únumpyrs   Ú	functoolsr   Z
numba.corer   Znumba.cuda.mathimplr   r   r
   r   r   r   r   r	   Ú<module>   s    