
    0Fie                    |   d dl mZ d dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ  eej                   ed          k    rd dlmZ nd d	lmZ d
 Z ej        ej                  dd            Z ej        ej                  ed                         Z ej        ej        j        j                  d             Z ej        ej        j        j                  d             Z ej        ej        j        j                  dd            Z ej        ej        j        j                  d             ZdS )    )annotationsN)parse)pickle)dask_deserializedask_serialize)
log_errorsz2.dev0)_core)corec                .    | 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results     :lib/python3.11/site-packages/distributed/protocol/numpy.pyr   r      s!    
 WF||M    c                `  	 | j         j        s| j         j        t          j        j        z  r@ddi}d g		fd}t          j        | ||pi                     dd                     	d<   |	fS | j         j	        dk    r	 dt          j                            | j         |pi                     dd           	          f}t          j
        |d                    nU# t          $ r: | j         j        t          j        us| j         j        dk    r d| j         j        f}Y nw xY wd| j         j        f}d }d| j        v r| j        }| j        }| j        j        }| t+          d
 |D                                } | j        j        sd| j        j        sXt          j        |           } t          j        j                            | d t9          || j                  D             |          } | j        s| j        }|                                 }ne| j        j        s| j        j        r| j        }|                     d          }n/t          j        |           } | j        }|                                 }|j         j        s|j         j        dk    r5|                     dtC          j"        | j         j        d          z            }	 |j#        }nJ# tH          $ r= |                     dtC          j"        | j         j        d          z            j#        }Y nw xY w|| j        || j        j        gd}|||d<   |g	|	fS )Nr   Tc                L                         t          |                      d S N)append
memoryview)fframess    r   buffer_callbackz0serialize_numpy_ndarray.<locals>.buffer_callback#   s!    MM*Q--(((((r   pickle-protocol)r   protocolr   V   r   c              3  ^   K   | ](}|d k    rt          d          nt          d          V  )dS )r   Nr   )slice).0ss     r   	<genexpr>z*serialize_numpy_ndarray.<locals>.<genexpr>J   s:      IIA166E$KKKuQxxIIIIIIr   c                (    g | ]\  }}|d k    r|n|S )r    )r#   ijs      r   
<listcomp>z+serialize_numpy_ndarray.<locals>.<listcomp>P   s(    PPP1a1ff!PPPr   )strides	writeableK)orderr   zu%d)dtypeshaper+   r,   broadcast_to)%r/   	hasobjectflagsnp_core
multiarrayLIST_PICKLEr   dumpsgetkindloads	Exceptiontypenpvoid	alignmentdescrstrr+   r0   r,   tuplec_contiguousf_contiguousascontiguousarraylibstride_tricks
as_stridedzipravelfieldsr   viewmathgcddata
ValueError)
xcontextheaderr   r   r1   r+   r,   rO   r   s
            @r   serialize_numpy_ndarrayrT      s   w QW]W-?-KK D!	) 	) 	) 	) 	) L+m(():DAA
 
 
q	
 v~ 	w|s	( ##Gw}"&9&9:KT&R&R $  B LA 	( 	( 	(w|27**ag.?1.D.D'	(  LAI~~w)G%	eIIIIIIIJw# 	AG,@ 	$Q''A$//PPGQY8O8OPPP# 0  A 7 )wwyy	
	 !5 )wwSw!! ##)wwyyz @DJ/!33yy!'*:A!>!>>??Ey E E Eyy!'*:A!>!>>??DE
 g'(	 F !-~VF6>s'   =AC ADD9K ALLc                   |                      d          r$t          j        |d         |dd                    S |\  }| d         \  }| d         \  }}|rt          j        |          }nt          j        |          }|                      d          r	| d         }n| d         }t          j        |||| d	         
          }|sd|j        _        n#|j        j        st          j        |dg          }|S )Nr   r   r   )buffersr,   r/   r1   r0   r+   )r/   bufferr+   FW)requirements)	r8   r   r:   r=   r/   ndarrayr3   r,   require)rS   r   framer,   	is_customr   r0   rQ   s           r   deserialize_numpy_ndarrayr^   x   s    zz( ;|F1Ivabbz::::HU+&LY7OMIr \"Xb\\zz.!!  ~&w

55&:KLLLA .!W 
. Jqu---Hr   c                
    i g fS r   r'   )rQ   s    r   serialize_numpy_ma_maskedr`      s    r6Mr   c                $    t           j        j        S r   )r=   mamasked)rS   r   s     r   deserialize_numpy_ma_maskedrd      s    5<r   c                   t          | j                  \  }}|t          |          d}| j        t          j        j        ur!t          | j                  \  }}||d<   ||z  }t          | j        t          j	        t          j
        t          j        f          rd| j                                        f}n3dt          j        | j        |pi                     dd                     f}||d<   ||fS )N)data-headernframesmask-headerFTr   r    
fill-value)rT   rO   lenmaskr=   rb   nomask
isinstance
fill_valueintegerfloatingbool_itemr   r7   r8   )rQ   rR   data_headerr   rS   mask_headermask_framesserialized_fill_values           r   serialize_numpy_maskedarrayrw      s    1!&99K(S[[AAF 	vRU\!!#:16#B#B [ +}+ !,R["( CDD 
!&(9(9(;(; < L2':':;Ld'S'S  !
 1F<6>r   c                T   | d         }|d | d                  }t          ||          }d| v r)| d         }|| d         d          }t          ||          }nt          j        j        }| d         \  }}	|rt	          j        |	          }	t          j                            |||	          S )Nrf   rg   rh   ri   )rk   rn   )r^   r=   rb   rl   r   r:   masked_array)
rS   r   rs   data_framesrO   rt   ru   rk   
pickled_fvrn   s
             r   deserialize_numpy_maskedarrayr|      s    'K,6),,-K$[+>>D]+VI.001(kBBu|#L1J
 .\*--
5d*EEEr   r   )
__future__r   rM   numpyr=   packaging.versionr   parse_versiondistributed.protocolr   distributed.protocol.serializer   r   distributed.utilsr   __version__r	   r4   r
   r   registerrZ   rT   r^   rb   MaskedConstantr`   rd   MaskedArrayrw   r|   r'   r   r   <module>r      s   " " " " " "      4 4 4 4 4 4 ' ' ' ' ' ' K K K K K K K K ( ( ( ( ( (=  MM($;$;;;&&&&&&&%%%%%%   $$W W W %$Wt 2:&&! !  '&!H 233  43 25:455  65 /00   102 25:122F F 32F F Fr   