
    
f]W                     ^    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 Ze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                 *    t                      |          S N)ufunc_db)	ufunc_keys    1lib/python3.11/site-packages/numba/cuda/ufuncs.pyget_ufunc_infor      s    ::i      c                  *   ddl m} m}m} ddlm ddlm} fdfdfdfdfd	}fd
}fd}fd}fd}fd}	fdfd}
fdfd}fd}fd}fd}fd}f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    rN|t          j*                 +                    |,                    d          |-                    d          d           |j.        |j/        |j.        |j/        |j.        |j/        |j.        |j/        |j.        |j/        |j.        |j0        |j0        j1        j1        d|t          j2        <   |dk    rN|t          j2                 +                    |,                    d          |-                    d          d           |j3        |j4        |j3        |j4        |j3        |j4        |j3        |j4        |j3        |j4        |j3        |j5        |j5        j6        j6        d|t          j7        <   |dk    rN|t          j7                 +                    |,                    d           |-                    d           d           |j8        |j9        |j8        |j9        |j8        |j9        |j8        |j9        |j8        |j9        |j8        |j:        |j:        j;        j;        d|t          j<        <   |dk    rN|t          j<                 +                    |,                    d!          |-                    d!          d           |j=        |j=        |j=        |j=        |j=        |j=        |j=        |j=        |j=        |j=        |j=        |j>        |j>        j?        j?        d|t          j@        <   |dk    rN|t          j@                 +                    |,                    d"          |-                    d"          d           |jA        |jA        |jA        |jA        |jA        |jA        |jA        |jA        |jA        |jA        |jA        |jB        |jB        jC        jC        d|t          jD        <   |dk    rN|t          jD                 +                    |,                    d#          |-                    d#          d           jE        jE        jE        jE        jE        jE        jE        jE        jE        jE        jE        jE        jE        jF        jF        d|t          jG        <   jH        jH        jH        jH        jH        jH        jH        jH        jH        jH        jH        jH        jH        jI        jI        d|t          jJ        <   jK        jK        jK        jK        jK        jK        jK        jK        jK        jK        jK        jK        jK        jL        jL        d|t          jM        <   jN        jN        jN        jN        jN        jN        jN        jN        jN        jN        jN        jN        jN        jO        jO        d$|t          jP        <   jH        jQ        jR        jQ        jR        jQ        jR        jQ        jR        jQ        jR        jS        jS        jT        jT        d%|t          jU        <   jE        jV        jW        jV        jW        jV        jW        jV        jW        jV        jW        jX        jX        jY        jY        d%|t          jZ        <   jH        jQ        jR        jQ        jR        jQ        jR        jQ        jR        jQ        jR        j[        j[        j\        j\        d%|t          j]        <   jE        jV        jW        jV        jW        jV        jW        jV        jW        jV        jW        j^        j^        j_        j_        d%|t          j`        <   |ja        |ja        |ja        |ja        |ja        |ja        |ja        |ja        |ja        |ja        |ja        d&|t          jb        <   |jc        |jc        |jc        |jc        |jc        |jc        |jc        |jc        |jc        |jc        |jc        d&|t          jd        <   |je        |je        |je        |je        |je        |je        |je        |je        |je        |je        |je        d&|t          jf        <   |jg        |jg        |jg        |jg        |jg        |jg        |jg        |jg        |jg        |jg        |jg        d'|t          jh        <   |ji        |ji        |ji        |ji        |ji        |ji        |ji        |ji        |ji        |ji        d(
|t          jj        <   |jk        |jk        |jk        |jk        |jk        |jk        |jk        |jk        |jk        |jk        d(
|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   s         r   np_unary_implzufunc_db.<locals>.np_unary_impl   sF    --c4;;;+B<<tGWc4000r   c                                          ||d           t          | |j        d                   } |||||          S )N   r   )r   r   r   r   s         r   np_binary_implz ufunc_db.<locals>.np_binary_impl!   sF    --c4;;;,R!==tGWc4000r   c                 6     t           j        | |||          S r   )mathsinr   r   r   r   r   s       r   np_real_sin_implz"ufunc_db.<locals>.np_real_sin_impl&       }TXwdCCCr   c                 6     t           j        | |||          S r   )r#   cosr%   s       r   np_real_cos_implz"ufunc_db.<locals>.np_real_cos_impl)   r'   r   c                 6     t           j        | |||          S r   )r#   tanr%   s       r   np_real_tan_implz"ufunc_db.<locals>.np_real_tan_impl,   r'   r   c                 6     t           j        | |||          S r   )r#   asinr%   s       r   np_real_asin_implz#ufunc_db.<locals>.np_real_asin_impl/       }TY#tDDDr   c                 6     t           j        | |||          S r   )r#   acosr%   s       r   np_real_acos_implz#ufunc_db.<locals>.np_real_acos_impl2   r1   r   c                 6     t           j        | |||          S r   )r#   atanr%   s       r   np_real_atan_implz#ufunc_db.<locals>.np_real_atan_impl5   r1   r   c                 6     t           j        | |||          S r   )r#   atan2r   r   r   r   r!   s       r   np_real_atan2_implz$ufunc_db.<locals>.np_real_atan2_impl8       ~dj'7CFFFr   c                 6     t           j        | |||          S r   )r#   hypotr:   s       r   np_real_hypot_implz$ufunc_db.<locals>.np_real_hypot_impl;   r<   r   c                 6     t           j        | |||          S r   )r#   sinhr%   s       r   np_real_sinh_implz#ufunc_db.<locals>.np_real_sinh_impl>   r1   r   c                                         ||d           |j        d         }|j        }t          j        |gdz   }|                     |||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chxrr*   np_real_cosh_implr&   rB   r   s                  r   np_complex_sinh_implz&ufunc_db.<locals>.np_complex_sinh_implA       	--c4;;;Xa[! 3%!),  "d1g66""7B//VVw==  '52$??w==  '52$??<<T**<<T**}}r   c                 6     t           j        | |||          S r   )r#   coshr%   s       r   rX   z#ufunc_db.<locals>.np_real_cosh_implX   r1   r   c                                         ||d           |j        d         }|j        }t          j        |gdz   }|                     |||d                   }|                     ||          }|j        }	|j        }
 | |||
g          } | |||	g          } | |||
g          } | |||	g          }|                    ||          |_        |                    ||          |_        |	                                S rD   rE   )r   r   r   r   rM   rN   rO   rP   rQ   rR   rS   rV   rW   rT   rU   r*   rX   r&   rB   r   s                  r   np_complex_cosh_implz&ufunc_db.<locals>.np_complex_cosh_impl[   rZ   r   c                 6     t           j        | |||          S r   )r#   tanhr%   s       r   np_real_tanh_implz#ufunc_db.<locals>.np_real_tanh_implr   r1   r   c                    "                     ||d           |j        d         }|j        }t          j        |gdz   }|                     |d          }|                     |||d                   }|                     ||          }	|j        }
|j        }  | |||g          } | |||g          } !| |||
g          } | |||
g          }|	                    ||          }|	                    ||          }|	                    ||          }|	                    ||          }|	                    ||          }|	                    ||          }|
                    ||          }|                    ||          }|	                    ||          }|	                    ||          }|	                    ||          }|	                    ||          }|
                    ||          }|                    ||          }|	                    ||          |	_        |	                    ||          |	_        |	                                S )Nr   r   r    g      ?)r   r   rF   r   rG   get_constantrH   rI   rJ   rK   faddfdivfsubrL   )#r   r   r   r   rM   rN   rO   ONErP   rQ   rR   rS   sicishrchr_rsis_rcicsqr_rcsqr_icdinv_drs_rcis_icis_rcrs_icnumrnumir*   rX   r&   rB   r   s#                                 r   np_complex_tanh_implz&ufunc_db.<locals>.np_complex_tanh_implu   s8    	--c4;;;Xa[! 3%!),""3,,  "d1g66""7B//VVgwt<<gwt<<%">>  '52$??\\"c""ll2t$$\\"d##\\"c""b"%%b"%%LL((S!$$R$$S"%%S"%%R$$||E5))||E5))<<e,,<<e,,}}r   c                 6     t           j        | |||          S r   )r#   asinhr%   s       r   np_real_asinh_implz$ufunc_db.<locals>.np_real_asinh_impl       }TZ'3EEEr   c                 6     t           j        | |||          S r   )r#   acoshr%   s       r   np_real_acosh_implz$ufunc_db.<locals>.np_real_acosh_impl   r~   r   c                 6     t           j        | |||          S r   )r#   atanhr%   s       r   np_real_atanh_implz$ufunc_db.<locals>.np_real_atanh_impl   r~   r   )f->fd->dzF->FzD->D)ff->fdd->d)r   r   )??->?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->Qr   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   )mnumba.cpythonr   r   r   numba.npr   numba.np.numpy_supportr   np_complex_sin_implnpr$   np_complex_cos_implr)   tan_implr,   	asin_implarcsin	acos_implarccos	atan_implarctanarctan2r>   rA   r\   r`   
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)r   r   r   r   r-   r0   r4   r7   r;   r?   rY   r^   ra   rz   r}   r   r   dbr!   r*   rX   r&   rB   r   r   s                     @@@@@@@r   r	   r	      s     ;:::::::::!!!!!!4444441 1 1 1 1
1 1 1 1 1
D D D D DD D D D DD D D D DE E E E EE E E E EE E E E EG G G G GG G G G GE E E E E        .E E E E E        .E E E E E$ $ $ $ $ $ $ $ $LF F F F FF F F F FF F F F F 
B ! ,,	 BrvJ ! ,,	 BrvJ ! ""	 BrvJ "!##	 BryM "!##	 BryM "!##	 BryM $# BrzN $# BrxL "!$$	 BrwK "!$$	 BrwK "!$$	 BrwK #"$$	 BrzN #"..	 BrzN #"$$	 BrzN ++ BrzN
 
^BrzN ++ BrzN
 
^BrzN %%%%%%%%%%%%%,, BrzN" 
2:44S9944S99; ; 	< 	< 	<
 %%%%%%%%%%%%%,, Br" 
2##44T::44T::%< %< 	= 	= 	=
 %%%%%%%%%%%%%,, BrwK" 
2744S9944S99; ; 	< 	< 	<
 %%%%%%%%%%%%%,, Br}" 
2=  44T::44T::"< "< 	= 	= 	=
 $$$$$$$$$$$%%,, Br|" 
2<44T::44T::!< !< 	= 	= 	=
 $$$$$$$$$$$%%,, BrxL" 
2844T::44T::< < 	= 	= 	=
 -------------55 Br~& ,,,,,,,,,,,,,44 Br}& -------------55 Br~& ,,,,,,,,,,,,,44 Br~& ,**********..11 BrzN& -**********..11 BrzN& ,**********++.. BrwK& -**********++.. BrwK& %%%%%%%%%%% Br~ $$$$$$$$$$$ Br} %%%%%%%%%%% Br~ ''''''''''' BryM %%%%%%%%%% Br} %%%%%%%%%% Br~ Ir   )__doc__r#   numpyr   	functoolsr   
numba.corer   numba.cuda.mathimplr   r   r   r	    r   r   <module>r      s                     @ @ @ @ @ @ @ @! ! ! a	 a	 a	 a	 a	r   