
    ܙd#                     ^    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} ddlm ddlm}m}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 }||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        <   |	|	d|t          j        <   |
|
d|t          j        <   ||d|t          j        <   ||d|t          j        <   ||||d|t          j        <   ||| j        | j        d|t          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"        <   |S )Nr   )	cmathimplmathimpl)_check_arity_and_homogeneity)np_complex_acosh_implnp_complex_cos_implnp_complex_sin_implc                 p     ||d           t          | |j        d                   } |||||          S )N   r   )r   argsfncontextbuildersigr   implr   s         r   np_unary_implzufunc_db.<locals>.np_unary_impl   sC    $$S$222+B<<tGWc4000r   c                 p     ||d           t          | |j        d                   } |||||          S )N   r   )r   r   r   s         r   np_binary_implz ufunc_db.<locals>.np_binary_impl"   sC    $$S$222,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_impl0       }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_impl3   r1   r   c                 6     t           j        | |||          S r   )r#   atanr%   s       r   np_real_atan_implz#ufunc_db.<locals>.np_real_atan_impl6   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_impl9       ~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   underlying_floatr   	signaturemake_complexrealimagfmul	_getvalue)r   r   r   r   tyftyfsig1xoutxrxisxishxrcxichxrr   r*   np_real_cosh_implr&   rB   s                  r   np_complex_sinh_implz&ufunc_db.<locals>.np_complex_sinh_implB       	%$S$222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_implY   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   r*   rX   r&   rB   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_impls   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   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   r*   rX   r&   rB   s#                                 r   np_complex_tanh_implz&ufunc_db.<locals>.np_complex_tanh_implv   s5    	%$S$222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)zff->fzdd->d)r   r   )#numba.cpythonr   r   numba.np.npyfuncsr   r   r   r   npr$   r)   tan_implr,   	asin_implarcsin	acos_implarccos	atan_implarctanarctan2r>   rA   r\   r`   
asinh_implarcsinharccosh
atanh_implarctanhradians_float_impldeg2radradiansdegrees_float_implrad2degdegrees)r   r   r   r   r   r-   r0   r4   r7   r;   r?   rY   r^   ra   rz   r}   r   r   dbr   r!   r*   rX   r&   rB   r   s                      @@@@@@@r   r	   r	      s    21111111>>>>>>8 8 8 8 8 8 8 8 8 8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Ir   )__doc__r#   numpyr   	functoolsr   
numba.corer   numba.cuda.mathimplr   r   r   r	    r   r   <module>r      s                     @ @ @ @ @ @ @ @! ! ! } } } } }r   