U
    hâË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 ]8\Z\ZZed	d
„ eD ƒƒrŠeeeeƒ q^eeeeƒ q^dS )é    )Úir)ÚcgutilsÚtypes)ÚRegistry)Ú	libdeviceÚlibdevicefuncsc                    sF   ‡ ‡‡fdd„}t tˆ dd … ƒ}dd„ tD ƒ}t|f|žŽ |ƒ 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   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cuda/libdeviceimpl.pyÚ
<listcomp>   s     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      s      z'libdevice_implement.<locals>.<listcomp>)Úgetattrr   r   Úlower)r   r!   r    r"   ÚkeyZargtysr   r   r   Úlibdevice_implement
   s    r(   c                    sN   t  ˆˆ¡}|j‰‡ ‡‡‡fdd„}ttˆ dd … ƒ}t|f|jžŽ |ƒ d S )Nc                    s   |j }g }ˆD ](}|  |j¡}|jr,| ¡ }| |¡ q|  ˆ¡}t ||¡}	t 	||	ˆ ¡}
g }g }d}ˆD ]J}|jr t 
||  |j¡¡}| |¡ | |¡ ql| || ¡ |d7 }ql| |
|¡}g }ˆtjkrÜ| |¡ |D ]}| | |¡¡ qàtˆtjƒ�rt ||¡S t ||¡S d S )Nr   é   )r   r	   r
   r$   Z
as_pointerÚappendr   r   r   r   Zalloca_oncer   r   ÚvoidÚloadÚ
isinstanceZUniTupleZ
pack_arrayZpack_struct)r   r   r   r   r   r   r   r
   r   r   r   Zactual_argsZvirtual_argsZarg_idxZtmp_argÚretZ
tuple_args©r   Znb_rettyÚprototype_argsr!   r   r   r"      s>    

ÿ



z2libdevice_implement_multiple_returns.<locals>.corer#   )r   Zcreate_signatureÚreturn_typer%   r   r&   r   )r   r!   r0   r   r"   r'   r   r/   r   Ú$libdevice_implement_multiple_returns   s
    .r2   c                 C   s   g | ]
}|j ‘qS r   )r$   r   r   r   r   r   P   s     r   N)Zllvmliter   Z
numba.corer   r   Znumba.core.imputilsr   Z
numba.cudar   r   Úregistryr&   r(   r2   Z	functionsÚitemsr   r!   r   Úanyr   r   r   r   Ú<module>   s   6