
    ∋d                       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 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)pickle)dask_deserializedask_serialize)
log_errorsc                .    | 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         j        s#| j         j        t          j        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>D   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>J   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void	alignmentdescrstrr(   r-   r)   tuplec_contiguousf_contiguousascontiguousarraylibstride_tricks
as_stridedzipravelfieldsr   viewmathgcddata
ValueError)
xcontextheaderr   r   r.   r(   r)   rL   r   s
            @r   serialize_numpy_ndarrayrQ      s   w QW]RW-?-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>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,   r.   r-   r(   )r,   bufferr(   FW)requirements)	r6   r   r8   r1   r,   ndarrayr0   r)   require)rP   r   framer)   	is_customr   r-   rN   s           r   deserialize_numpy_ndarrayr[   r   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$   )rN   s    r   serialize_numpy_ma_maskedr]      s    r6Mr   c                $    t           j        j        S r   )r1   mamasked)rP   r   s     r   deserialize_numpy_ma_maskedra      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)rQ   rL   lenmaskr1   r_   nomask
isinstance
fill_valueintegerfloatingbool_itemr   r5   r6   )rN   rO   data_headerr   rP   mask_headermask_framesserialized_fill_values           r   serialize_numpy_maskedarrayrt      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 )Nrc   rd   re   rf   )rh   rk   )r[   r1   r_   ri   r   r8   masked_array)
rP   r   rp   data_framesrL   rq   rr   rh   
pickled_fvrk   s
             r   deserialize_numpy_maskedarrayry      s    'K,6),,-K$[+>>D]+VI.001(kBBu|#L1J
 .\*--
5d*EEEr   r   )
__future__r   rJ   numpyr1   distributed.protocolr   distributed.protocol.serializer   r   distributed.utilsr   r   registerrW   rQ   r[   r_   r2   MaskedConstantr]   ra   MaskedArrayrt   ry   r$   r   r   <module>r      s   " " " " " "      ' ' ' ' ' ' K K K K K K K K ( ( ( ( ( (   $$W W W %$Wt 2:&&" "  '&"J 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   