U
    /e                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ dd Ze	ejddd	Zeeje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dZeejjjdd ZdS )    )annotationsN)pickle)dask_deserializedask_serialize)
log_errorsc                 C  s   | j j}|dkrd}|S )zbItemsize of dtype

    Try to return the itemsize of the base element, return 8 as a fallback
          )baseitemsize)dtresult r   >/tmp/pip-unpacked-wheel-g426oqom/distributed/protocol/numpy.pyr
      s    r
   c           	   
     sf  | j js| j jtjjj@ r\ddi}d g  fdd}tj| ||pBi 	dd d d< | fS | j j
dkrz4d	tjj| j |p|i 	dd d
f}t|d	  W q tk
r   | j jtjk	s| j jd	krʂ nd| j jf}Y qX nd| j jf}d }d| jkrh| j}| j}| jj}| tdd |D  } | jjsh| jjsht| } tjjj| dd t|| jD |d} | js| j}|  }n@| jjs| jjr| j}| jdd}nt| } | j}|  }|j js|j jdkr| dt!"| j jd }z
|j#}W n2 t$k
r.   | dt!"| j jd j#}Y nX || j|| jjgd}|d k	rX||d< |g | fS )Nr   Tc                   s     t|  d S N)append
memoryview)fframesr   r   buffer_callback   s    z0serialize_numpy_ndarray.<locals>.buffer_callbackpickle-protocol)r   protocolr   V   r   c                 s  s&   | ]}|d krt dnt dV  qdS )r   Nr   )slice).0sr   r   r   	<genexpr>D   s     z*serialize_numpy_ndarray.<locals>.<genexpr>c                 S  s    g | ]\}}|d kr|n|qS )r   r   )r   ijr   r   r   
<listcomp>J   s     z+serialize_numpy_ndarray.<locals>.<listcomp>)strides	writeableK)orderr   zu%d)dtypeshaper"   r#   broadcast_to)%r&   Z	hasobjectflagsnpcoreZ
multiarrayZLIST_PICKLEr   dumpsgetkindloads	Exceptiontypevoid	alignmentdescrstrr"   r'   r#   tuplec_contiguousf_contiguousZascontiguousarraylibZstride_tricksZ
as_stridedzipZravelfieldsr
   viewmathgcddata
ValueError)	xcontextheaderr   r   r(   r"   r#   r?   r   r   r   serialize_numpy_ndarray   sz    
 



"
rD   c                 C  s   |  dr$tj|d |dd  dS |\}| d \}| d \}}|rPt|}n
t|}|  drn| d }n| d }tj|||| d	 d
}|sd|j_n|jjstj|dgd}|S )Nr   r   r   )buffersr#   r&   r(   r'   r"   )r&   bufferr"   FW)requirements)	r-   r   r/   r*   r&   ndarrayr)   r#   require)rC   r   framer#   Z	is_customr   r'   rA   r   r   r   deserialize_numpy_ndarrayr   s"    





rL   c                 C  s   i g fS r   r   )rA   r   r   r   serialize_numpy_ma_masked   s    rM   c                 C  s   t jjS r   )r*   maZmasked)rC   r   r   r   r   deserialize_numpy_ma_masked   s    rO   c                 C  s   t | j\}}|t|d}| jtjjk	rHt | j\}}||d< ||7 }t| jtj	tj
tjfrpd| j f}n dtj| j|pi dd df}||d< ||fS )N)data-headernframesmask-headerFTr   r   
fill-value)rD   r?   lenmaskr*   rN   nomask
isinstance
fill_valueintegerZfloatingZbool_itemr   r,   r-   )rA   rB   data_headerr   rC   mask_headermask_framesZserialized_fill_valuer   r   r   serialize_numpy_maskedarray   s      r^   c           
      C  s   | d }|d | d  }t ||}d| krN| d }|| d d  }t ||}ntjj}| d \}}	|rpt|	}	tjj|||	dS )NrP   rQ   rR   rS   )rU   rX   )rL   r*   rN   rV   r   r/   Zmasked_array)
rC   r   r[   Zdata_framesr?   r\   r]   rU   Z
pickled_fvrX   r   r   r   deserialize_numpy_maskedarray   s    

r_   )N)N)
__future__r   r=   Znumpyr*   Zdistributed.protocolr   Zdistributed.protocol.serializer   r   Zdistributed.utilsr   r
   registerrI   rD   rL   rN   r+   ZMaskedConstantrM   rO   ZMaskedArrayr^   r_   r   r   r   r   <module>   s&   
Z
%

