a
    Df
                     @   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                    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   e/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/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#   keyZ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}|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"   r1   r   r#   r(   r   r0   r   $libdevice_implement_multiple_returns   s
    .r3   c                 C   s   g | ]
}|j qS r   )r%   r   r   r   r   r   P   r   r   N)Zllvmliter   Z
numba.corer   r   Znumba.core.imputilsr   Z
numba.cudar   r   registryr'   r)   r3   Z	functionsitemsr    r"   r   anyr   r   r   r   <module>   s   6