U
    ,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 re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   </tmp/pip-unpacked-wheel-eu7e0c37/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rt
|| |j}|| || ql|||  |d7 }ql||
|}g }tjkr|| |D ]}||| qt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