o
    Tæ«dö
  ã                   @   sœ   d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 eƒ Z
e
jZdd„ Zdd„ Ze	j ¡ D ]\Z\ZZed	d
„ eD ƒƒrEeeeeƒ q/eeeeƒ q/dS )é    )Úir)ÚcgutilsÚtypes)ÚRegistry)Ú	libdeviceÚlibdevicefuncsc                    sH   ‡ ‡‡fdd„}t tˆ dd … ƒ}dd„ tD ƒ}t|g|¢R Ž |ƒ d S )Nc           	         sH   |j }ˆ  ˆ¡}‡ fdd„ˆD ƒ}t ||¡}t ||ˆ¡}| ||¡S )Nc                    s   g | ]}ˆ   |j¡‘qS © )Úget_value_typeÚty©Ú.0Úarg©Úcontextr   úk/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/site-packages/numba/cuda/libdeviceimpl.pyÚ
<listcomp>   ó    z5libdevice_implement.<locals>.core.<locals>.<listcomp>)Úmoduler	   r   ÚFunctionTyper   Úget_or_insert_functionÚcall)	r   ÚbuilderÚsigÚargsÚlmodÚfrettyÚfargtysÚfntyÚfn©ÚfuncÚnbargsÚrettyr   r   Úcore   s   
z!libdevice_implement.<locals>.coreé   c                 S   s   g | ]}|j s|j‘qS r   )Úis_ptrr
   r   r   r   r   r      r   z'libdevice_implement.<locals>.<listcomp>)Úgetattrr   r   Úlower)r    r"   r!   r#   ÚkeyÚargtysr   r   r   Úlibdevice_implement
   s   r*   c                    sP   t  ˆˆ¡}|j‰‡ ‡‡‡fdd„}ttˆ dd … ƒ}t|g|j¢R Ž |ƒ d S )Nc                    s  |j }g }ˆD ]}|  |j¡}|jr| ¡ }| |¡ q|  ˆ¡}t ||¡}	t 	||	ˆ ¡}
g }g }d}ˆD ]%}|jrPt 
||  |j¡¡}| |¡ | |¡ q6| || ¡ |d7 }q6| |
|¡}g }ˆtjkrn| |¡ |D ]
}| | |¡¡ qptˆtjƒr‡t ||¡S t ||¡S )Nr   é   )r   r	   r
   r%   Ú
as_pointerÚappendr   r   r   r   Úalloca_oncer   r   ÚvoidÚloadÚ
isinstanceÚUniTupleÚ
pack_arrayÚpack_struct)r   r   r   r   r   r   r   r
   r   r   r   Úactual_argsÚvirtual_argsÚarg_idxÚtmp_argÚretÚ
tuple_args©r    Únb_rettyÚprototype_argsr"   r   r   r#      s>   

ÿ



z2libdevice_implement_multiple_returns.<locals>.corer$   )r   Úcreate_signatureÚreturn_typer&   r   r'   r   )r    r"   r=   r   r#   r(   r   r;   r   Ú$libdevice_implement_multiple_returns   s
   .r@   c                 C   s   g | ]}|j ‘qS r   )r%   r   r   r   r   r   P   s    r   N)Úllvmliter   Ú
numba.corer   r   Únumba.core.imputilsr   Ú
numba.cudar   r   Úregistryr'   r*   r@   Ú	functionsÚitemsr    r"   r   Úanyr   r   r   r   Ú<module>   s    6ü