U
    /e
                     @  s  d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	m
Z
mZ zddlmZ W n  ek
rt   ddlmZ Y nX eejdd	 Zeejd
d Ze
ejdd Ze	ejdd ZzddlmZ ddlmZ W n ek
r   dZdZY nX edk	rVdd Zeee eee
edd Zeee	edd Zedk	rdeefde
e	ffD ]\Z Z!Z"eee e!e" qtdS )z%
Efficient serialization GPU arrays.
    )annotationsN)cuda_deserializecuda_serialize)dask_deserializedask_serializeregister_generic)"dask_deserialize_rmm_device_buffer)dask_deserialize_numba_arrayc                 C  sb   | j d s"| j d s"tj| dd} | j }t| j|d< tj| jft	d| j
ddg}||fS )	NZC_CONTIGUOUSZF_CONTIGUOUST)copystridesu1)   shapedtypeZmemptrr   )flagscupyarrayZ__cuda_array_interface__r
   tupler   ndarraynbytesr   dataxheaderframes r   =/tmp/pip-unpacked-wheel-g426oqom/distributed/protocol/cupy.pycuda_serialize_cupy_ndarray   s    
   r   c                 C  s0   |\}t j| d | d t |j| d d}|S )Nr   Ztypestrr   r   )r   r   Zasarrayr   )r   r   framearrr   r   r   cuda_deserialize_cupy_ndarray,   s    
r!   c                 C  s"   t | \}}dd |D }||fS )Nc                 S  s   g | ]}t t|qS r   )
memoryviewr   Zasnumpy).0fr   r   r   
<listcomp>;   s     z/dask_serialize_cupy_ndarray.<locals>.<listcomp>)r   r   r   r   r   dask_serialize_cupy_ndarray8   s    r&   c                 C  s   t | |g}t| |}|S N)dask_deserialize_cuda_bufferr!   )r   r   r    r   r   r   dask_deserialize_cupy_ndarray?   s    
r)   )MatDescriptor)spmatrixc                 C  s   t jjjdfS )Nr   )r   Zcusparser*   create)otherr   r   r   reduce_matdescriptorP   s    r.   c                 C  s   i g  }}||fS r'   r   r   r   r   r   serialize_cupy_matdescriptorW   s    
r/   c                 C  s   t  S r'   )r*   r,   )r   r   r   r   r   deserialize_cupy_matdescriptor]   s    r0   ZcudaZdask)#__doc__
__future__r   copyregr   Zdistributed.protocol.cudar   r   Zdistributed.protocol.serializer   r   r   Zdistributed.protocol.rmmr   r(   ImportErrorZdistributed.protocol.numbar	   registerr   r   r!   r&   r)   Zcupy.cusparser*   Zcupyx.scipy.sparser+   r.   pickler/   r0   nsdr   r   r   r   <module>   sJ   










