U
    /e[                     @  s   d dl mZ d dlZd dlZd dlZd dlmZm	Z	 d dl
mZmZ zd dlmZ W n ek
rl   dZY nX e	ejjjdd Zeejjjdd	 Zeejjjd
d Zeejjjdd ZdS )    )annotationsN)cuda_deserializecuda_serialize)dask_deserializedask_serialize)"dask_deserialize_rmm_device_bufferc                 C  s   | j d s:| j d s:| j}tjj|| jd}||  |} | j }t	| j
|d< tjjjj| jfdtd| jdg}||fS )NZC_CONTIGUOUSZF_CONTIGUOUS)dtypestrides)   u1shaper	   r   gpu_data)flagsr   numbacudaZdevice_arrayr   Zcopy_to_deviceZ__cuda_array_interface__copytupler	   ZcudadrvdevicearrayDeviceNDArraynbytesnpr   )xr   theaderframes r   >/tmp/pip-unpacked-wheel-g426oqom/distributed/protocol/numba.pycuda_serialize_numba_ndarray   s    


   r   c                 C  sD   |\}| d }| d }t jjj||t| d t j|jd}|S )Nr   r	   Ztypestrr   )r   r   r   r   r   r   Zas_cuda_arrayr   )r   r   framer   r	   arrr   r   r   cuda_deserialize_numba_ndarray%   s    r!   c                 C  s"   t | \}}dd |D }||fS )Nc                 S  s   g | ]}t | qS r   )
memoryviewZcopy_to_host.0fr   r   r   
<listcomp>7   s     z0dask_serialize_numba_ndarray.<locals>.<listcomp>)r   )r   r   r   r   r   r   dask_serialize_numba_ndarray4   s    r'   c                 C  sH   t rt | |g}n(dd |D }|D ]}t|tjj q$t| |}|S )Nc                 S  s"   g | ]}t jtt|qS r   )r   r   Z	to_devicer   Zasarrayr"   r#   r   r   r   r&   @   s     z0dask_deserialize_numba_array.<locals>.<listcomp>)r   weakreffinalizer   r   Zcurrent_contextr!   )r   r   r%   r    r   r   r   dask_deserialize_numba_array;   s    
r*   )
__future__r   r(   Z
numba.cudar   Znumpyr   Zdistributed.protocol.cudar   r   Zdistributed.protocol.serializer   r   Zdistributed.protocol.rmmr   ImportErrorregisterr   r   r   r   r!   r'   r*   r   r   r   r   <module>   s"   



