U
    ,‰d_’  ã                C  @   s„  d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ eddƒZeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfe	ede	ddgfeededded	edded
eddgfeededdgfeededdgfeededdgfeededdgfeededdgfeede	ddgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfe	ededdgfe	ededdgfe	ededdgfe	ededdgfeededdgfeededdgfeededdgfeededdgfeededdgfe	ededdgfe	ededdgfe	ededdgfe	ededdgfe	ededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfeededded	eddgfeededdgfeededdgfeededdgfeededded	eddgfe
ededdededdededdgfeededdgfeededdgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededdgfeede	ddgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfe	ededdgfe	ededdgfe	ededdgfe	ededdgfeededdgfeededdgfeededdgfeededdgfe	ededdgfe	ededdgfe	ededdgfe	ededdgfeededdgfeededdgfeededdgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	edded
eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfeededdededdgfeededdededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededdgfeededded	eddgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdededdgfeededdededdgfeededded	eddgfeededded	eddgfeededdgfeededdgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfe	ede	ddgfe	ede	dded	e	ddgfe	ede	dded	e	ddgfe	ededdgfe	ededdgfe	ededdgfe	ededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeede	ddgfeededded	eddgfeededded	eddgfeededdededdgfeededdededdgfeededded	eddgfe	ede	dded	e	ddgfeededded	eddgfeededdgfeededdgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfeededdgfeede	ddgfeededded	eddgfeededded	eddgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededded	eddgfeededded	eddgfeededded	eddededdgfeededded	eddededdgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededded	edded
eddgfeededdgfeededded	eddgfeededded	eddgfeededdgfeededdgfeededdgfe
ededdededdededdgfe
ededdededdededdgfe
ededdededdededdgfe
ededdededdededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededdgfeededded	eddgfeededdgfeededdgfeededdgfeededdgfeededdgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfeede	ddgfe	ede	dded	e	ddgfe	ede	dded	e	ddgfeededded	eddgfeededded	eddgfeededded	eddgfe	ede	dded	e	ddgfeededded	eddgfeededded	eddgfeededded	edded
eddgfeededdgfeededdgfeededdgfeededdgfeededdededdgfeededdededdgfdœ=Zdd„ ZdZdZdd„ ZdS ) é    )Ú
namedtuple)Úindent)Úfloat32Úfloat64Úint16Úint32Úint64ÚvoidÚTuple)Ú	signatureÚarg)ÚnameÚtyÚis_ptrÚxFÚyÚzÚdÚfZsptrTZcptrÚinÚbÚhÚiÚnÚlÚcZquo(=  Z__nv_absZ	__nv_acosZ
__nv_acosfZ
__nv_acoshZ__nv_acoshfZ	__nv_asinZ
__nv_asinfZ
__nv_asinhZ__nv_asinhfZ	__nv_atanZ
__nv_atan2Z__nv_atan2fZ
__nv_atanfZ
__nv_atanhZ__nv_atanhfZ	__nv_brevZ__nv_brevllZ__nv_byte_permZ	__nv_cbrtZ
__nv_cbrtfZ	__nv_ceilZ
__nv_ceilfZ__nv_clzZ
__nv_clzllZ__nv_copysignZ__nv_copysignfZ__nv_cosZ	__nv_cosfZ	__nv_coshZ
__nv_coshfZ
__nv_cospiZ__nv_cospifZ__nv_dadd_rdZ__nv_dadd_rnZ__nv_dadd_ruZ__nv_dadd_rzZ__nv_ddiv_rdZ__nv_ddiv_rnZ__nv_ddiv_ruZ__nv_ddiv_rzZ__nv_dmul_rdZ__nv_dmul_rnZ__nv_dmul_ruZ__nv_dmul_rzZ__nv_double2float_rdZ__nv_double2float_rnZ__nv_double2float_ruZ__nv_double2float_rzZ__nv_double2hiintZ__nv_double2int_rdZ__nv_double2int_rnZ__nv_double2int_ruZ__nv_double2int_rzZ__nv_double2ll_rdZ__nv_double2ll_rnZ__nv_double2ll_ruZ__nv_double2ll_rzZ__nv_double2lointZ__nv_double2uint_rdZ__nv_double2uint_rnZ__nv_double2uint_ruZ__nv_double2uint_rzZ__nv_double2ull_rdZ__nv_double2ull_rnZ__nv_double2ull_ruZ__nv_double2ull_rzZ__nv_double_as_longlongZ__nv_drcp_rdZ__nv_drcp_rnZ__nv_drcp_ruZ__nv_drcp_rzZ__nv_dsqrt_rdZ__nv_dsqrt_rnZ__nv_dsqrt_ruZ__nv_dsqrt_rzZ__nv_erfZ	__nv_erfcZ
__nv_erfcfZ__nv_erfcinvZ__nv_erfcinvfZ
__nv_erfcxZ__nv_erfcxfZ	__nv_erffZ__nv_erfinvZ__nv_erfinvfZ__nv_expZ
__nv_exp10Z__nv_exp10fZ	__nv_exp2Z
__nv_exp2fZ	__nv_expfZ
__nv_expm1Z__nv_expm1fZ	__nv_fabsZ
__nv_fabsfZ__nv_fadd_rdZ__nv_fadd_rnZ__nv_fadd_ruZ__nv_fadd_rzZ__nv_fast_cosfZ__nv_fast_exp10fZ__nv_fast_expfZ__nv_fast_fdividefZ__nv_fast_log10fZ__nv_fast_log2fZ__nv_fast_logfZ__nv_fast_powfZ__nv_fast_sincosfZ__nv_fast_sinfZ__nv_fast_tanfZ	__nv_fdimZ
__nv_fdimfZ__nv_fdiv_rdZ__nv_fdiv_rnZ__nv_fdiv_ruZ__nv_fdiv_rzZ__nv_ffsZ
__nv_ffsllZ__nv_finitefZ__nv_float2half_rnZ__nv_float2int_rdZ__nv_float2int_rnZ__nv_float2int_ruZ__nv_float2int_rzZ__nv_float2ll_rdZ__nv_float2ll_rnZ__nv_float2ll_ruZ__nv_float2ll_rzZ__nv_float2uint_rdZ__nv_float2uint_rnZ__nv_float2uint_ruZ__nv_float2uint_rzZ__nv_float2ull_rdZ__nv_float2ull_rnZ__nv_float2ull_ruZ__nv_float2ull_rzZ__nv_float_as_intZ
__nv_floorZ__nv_floorfZ__nv_fmaZ__nv_fma_rdZ__nv_fma_rnZ__nv_fma_ruZ__nv_fma_rzZ	__nv_fmafZ__nv_fmaf_rdZ__nv_fmaf_rnZ__nv_fmaf_ruZ__nv_fmaf_rzZ	__nv_fmaxZ
__nv_fmaxfZ	__nv_fminZ
__nv_fminfZ	__nv_fmodZ
__nv_fmodfZ__nv_fmul_rdZ__nv_fmul_rnZ__nv_fmul_ruZ__nv_fmul_rzZ__nv_frcp_rdZ__nv_frcp_rnZ__nv_frcp_ruZ__nv_frcp_rzZ
__nv_frexpZ__nv_frexpfZ__nv_frsqrt_rnZ__nv_fsqrt_rdZ__nv_fsqrt_rnZ__nv_fsqrt_ruZ__nv_fsqrt_rzZ__nv_fsub_rdZ__nv_fsub_rnZ__nv_fsub_ruZ__nv_fsub_rzZ	__nv_haddZ__nv_half2floatZ__nv_hiloint2doubleZ
__nv_hypotZ__nv_hypotfZ
__nv_ilogbZ__nv_ilogbfZ__nv_int2double_rnZ__nv_int2float_rdZ__nv_int2float_rnZ__nv_int2float_ruZ__nv_int2float_rzZ__nv_int_as_floatZ__nv_isfinitedZ__nv_isinfdZ__nv_isinffZ__nv_isnandZ__nv_isnanfZ__nv_j0Z__nv_j0fZ__nv_j1Z__nv_j1fZ__nv_jnZ__nv_jnfZ
__nv_ldexpZ__nv_ldexpfZ__nv_lgammaZ__nv_lgammafZ__nv_ll2double_rdZ__nv_ll2double_rnZ__nv_ll2double_ruZ__nv_ll2double_rzZ__nv_ll2float_rdZ__nv_ll2float_rnZ__nv_ll2float_ruZ__nv_ll2float_rzZ
__nv_llabsZ
__nv_llmaxZ
__nv_llminZ__nv_llrintZ__nv_llrintfZ__nv_llroundZ__nv_llroundfZ__nv_logZ
__nv_log10Z__nv_log10fZ
__nv_log1pZ__nv_log1pfZ	__nv_log2Z
__nv_log2fZ	__nv_logbZ
__nv_logbfZ	__nv_logfZ__nv_longlong_as_doubleZ__nv_maxZ__nv_minZ	__nv_modfZ
__nv_modffZ
__nv_mul24Z__nv_mul64hiZ
__nv_mulhiZ__nv_nearbyintZ__nv_nearbyintfZ__nv_nextafterZ__nv_nextafterfZ__nv_normcdfZ__nv_normcdffZ__nv_normcdfinvZ__nv_normcdfinvfZ	__nv_popcZ__nv_popcllZ__nv_powZ	__nv_powfZ	__nv_powiZ
__nv_powifZ
__nv_rcbrtZ__nv_rcbrtfZ__nv_remainderZ__nv_remainderfZ__nv_remquoZ__nv_remquofZ
__nv_rhaddZ	__nv_rintZ
__nv_rintfZ
__nv_roundZ__nv_roundfZ
__nv_rsqrtZ__nv_rsqrtfZ__nv_sadZ__nv_saturatefZ__nv_scalbnZ__nv_scalbnfZ__nv_signbitdZ__nv_signbitfZ__nv_sinZ__nv_sincosZ__nv_sincosfZ__nv_sincospiZ__nv_sincospifZ	__nv_sinfZ	__nv_sinhZ
__nv_sinhfZ
__nv_sinpiZ__nv_sinpifZ	__nv_sqrtZ
__nv_sqrtfZ__nv_tanZ	__nv_tanfZ	__nv_tanhZ
__nv_tanhfZ__nv_tgammaZ__nv_tgammafZ
__nv_truncZ__nv_truncfZ
__nv_uhaddZ__nv_uint2double_rnZ__nv_uint2float_rdZ__nv_uint2float_rnZ__nv_uint2float_ruZ__nv_uint2float_rzZ__nv_ull2double_rdZ__nv_ull2double_rnZ__nv_ull2double_ruZ__nv_ull2double_rzZ__nv_ull2float_rdZ__nv_ull2float_rnZ__nv_ull2float_ruZ__nv_ull2float_rzZ__nv_ullmaxZ__nv_ullminZ	__nv_umaxZ	__nv_uminZ__nv_umul24Z__nv_umul64hiZ__nv_umulhiZ__nv_urhaddZ	__nv_usadZ__nv_y0Z__nv_y0fZ__nv_y1Z__nv_y1fZ__nv_ynZ__nv_ynfc                 C   s\   dd„ |D ƒ}| t kr"| d| ¡ t|ƒdkr8t|ƒ} n|d } dd„ |D ƒ}t| f|žŽ S )z—
    Given the return type and arguments for a libdevice function, return the
    signature of the stub function used to call it from CUDA Python.
    c                 S   s   g | ]}|j r|j‘qS © ©r   r   ©Ú.0r   r   r   ú=/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/libdevicefuncs.pyÚ
<listcomp>é  s      z$create_signature.<locals>.<listcomp>r   é   c                 S   s   g | ]}|j s|j‘qS r   r   r   r   r   r    r!   ô  s      )r	   ÚinsertÚlenr
   r   )ÚrettyÚargsZreturn_typesÚargtypesr   r   r    Úcreate_signatureâ  s    
r(   zc
See https://docs.nvidia.com/cuda/libdevice-users-guide/{func}.html

{param_types}
:rtype: {retty}
z1:param {a.name}: Argument.
:type {a.name}: {a.ty}c               	      sœ   t  ¡ D ]Ž\} \}}dd„ ‰ ‡ fdd„|D ƒ}d |¡}t||ƒ}d dd„ |D ƒ¡}tj||j| d}t|d	ƒ}td
| dd … › d|› d|› dƒ qd S )Nc                 S   s   | j dkrdS | j S d S )Nr   r   )r   )r   r   r   r    Úargname  s    
zgenerate_stubs.<locals>.argnamec                    s   g | ]}|j sˆ |ƒ‘qS r   )r   ©r   Úa©r)   r   r    r!     s      z"generate_stubs.<locals>.<listcomp>z, Ú
c                 S   s   g | ]}|j stj|d ‘qS ))r+   )r   Úparam_templateÚformatr*   r   r   r    r!     s      )Úparam_typesr%   Úfuncz    zdef é   ú(z
):
    """z"""

)	Ú	functionsÚitemsÚjoinr(   Údocstring_templater/   Úreturn_typer   Úprint)r   r%   r&   ÚargnamesZargstrr   r0   Z	docstringr   r,   r    Úgenerate_stubs  s    

ÿ  ÿ
r;   N)Úcollectionsr   Útextwrapr   Znumba.typesr   r   r   r   r   r	   r
   Znumba.core.typing.templatesr   r   r4   r(   r7   r.   r;   r   r   r   r    Ú<module>   s   $
þþþþýþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþýþþþþþþþþþþþþþýþ	ýþ	ýþ	ýþ	ýþ	ýþ	ýþ	ýþ	ýþ	ýþ	þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþýþ	ýþ	þþýþþþþþýþ	ýþ	ýþ	ýþþþþþþþþþþþþþþþþþþþýþþþþþ€ € € € € € € ±       `