
    0Fie                        d dl mZ d dl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mZmZmZmZmZmZmZ d dlmZ d dlmZ  ej        e          Z	 dddZddZdS )    )annotationsN)pickle)
decompressmaybe_compress)Pickled	Serialize
SerializedToPicklemerge_and_deserializemsgpack_decode_defaultmsgpack_encode_defaultserialize_and_split)msgpack_opts)ensure_memoryviewmessagereturnlistc                  	
 	 rdv rdd         ini fddfd	dfd	d
g
	
fd}t          j        | |d          
d<   
S # t          $ r t                              dd            w xY w)a  Transform Python message to bytestream suitable for communication

    Developer Notes
    ---------------
    The approach here is to use `msgpack.dumps()` to serialize `msg` and
    write the result to the first output frame. If `msgpack.dumps()`
    encounters an object it cannot serialize like a NumPy array, it is handled
    out-of-band by `_encode_default()` and appended to the output frame list.
    compressionc           	        t          |                     dd gt          |          z                      }t          t          |                    D ]&}||         t	          ||         fi \  ||<   ||<   't          |          | d<   d S )Nr   )r   getlenranger   tuple)headerframesr   icompress_optss       9lib/python3.11/site-packages/distributed/protocol/core.py_inplace_compress_framesz'dumps.<locals>._inplace_compress_frames-   s    vzz-$#f++9MNNOOK3v;;''  q>)0>q	1 1%21 1-KNF1I %*+$6$6F=!!!    objSerialized | Serializer   r   c                    t          | t                    r| j        | j        }}n#t	          |           \  }} ||           t          |          |d<   t          j        |t          d          }|g|z   S )N)serializerson_errorcontextsizenum-sub-framesTdefaultuse_bin_type)	
isinstancer	   r   r   r   r   msgpackdumpsr   )r"   
sub_header
sub_framesr    r'   frame_split_sizer&   r%   s      r   create_serialized_sub_framesz+dumps.<locals>.create_serialized_sub_frames8   s    #z** 
A),SZJ

)< +%#)* * *&
J )(Z@@@+.z??J'( $:  J <*,,r!   Pickled | ToPicklec                   t          | t                    r| j        | j        c}n.g dt	          j        | j        fd          i} |           t                    |d<   t          j        |          }|gz   S )Npickled-objc                H                         t          |                     S )N)appendr   )xr1   s    r   <lambda>z:dumps.<locals>.create_pickled_sub_frames.<locals>.<lambda>T   s"    *2C2C-a003 3 r!   )buffer_callbackr)   )	r-   r   r   r   r   r/   datar   r.   )r"   r0   r1   r    s     @r   create_pickled_sub_framesz(dumps.<locals>.create_pickled_sub_framesJ   s    #w'' A),SZ&
JJ
!6<) ) ) )	$ $ $	
 )(Z@@@+.z??J'( z22J<*,,r!   Nc                V   t          | t          t          f          r1t                    }                     |                      d|iS t          | t
          t          f          r1t                    }                     |                      d|iS t          |           S )N__Serialized____Pickled__)r-   r   r	   r   extendr
   r   r   )r"   offsetr=   r3   r   s     r   _encode_defaultzdumps.<locals>._encode_defaulta   s    #	:677 	3V::3??@@@(&11C(G!455 3V77<<===%v..-c222r!   Tr*   r   zFailed to Serializeexc_info)r"   r#   r   r   )r"   r4   r   r   )r.   r/   	Exceptionloggercritical)msgr%   r&   r'   r2   rC   r    r   r=   r3   r   s    ```` @@@@@r   r/   r/      s$   K 	}//*GM,BCMMM		7 		7 		7 		7 		7	- 	- 	- 	- 	- 	- 	- 	- 	- 	-$	- 	- 	- 	- 	- 	-* 
	3 
	3 
	3 
	3 
	3 
	3 
	3 M#TRRRq	   -===s   AA (BTc                     t           j                            d          	  fd}t          j         d         f|ddt
          S # t          $ r t                              dd            w xY w)	z+Transform bytestream back into Python valuezdistributed.scheduler.picklec                b   |                      dd          }|dk    rut          j        |         ft          ddt          }|dz  }|||d         z            }r&d|v rt          ||          }t          ||          S t          ||          S |                      d	d          }|dk    rst          j        |                   }|dz  }|||d         z            }d|v rt          ||          }rt          j        |d
         |          S t          d          t          |           S )Nr?   r   Fobject_hookuse_list   r)   r   )deserializersr@   r6   )bufferszPUnpickle on the Scheduler isn't allowed, set `distributed.scheduler.pickle=true`)
r   r.   loadsr   r   r   r   r	   r   
ValueError)r"   rB   r0   r1   allow_pickledeserializerP   r   s       r   _decode_defaultzloads.<locals>._decode_default|   s|   WW-q11Fzz$]6N 6"  #	 
 !#FVjAQ6R-R$RS
 >$
22%/
J%G%G
0"Jm    &j*===WW]A..Fzz$]6&>::
!#FVjAQ6R-R$RS
 J..!+J
!C!CJ !<
=(A:VVVV$j   *#...r!   r   FrL   zFailed to deserializeTrD   )	daskconfigr   r.   rR   r   rF   rG   rH   )r   rU   rP   rV   rT   s   ``` @r   rR   rR   u   s     ;??#ABBL,"	/ "	/ "	/ "	/ "	/ "	/ "	/ "	/H }1I
#2U
 
FR
 
 	
    /$???s   'A (A5)Nr   NN)r   r   )TN)
__future__r   loggingr.   dask.configrW   distributed.protocolr    distributed.protocol.compressionr   r   distributed.protocol.serializer   r   r	   r
   r   r   r   r   distributed.protocol.utilsr   distributed.utilsr   	getLogger__name__rG   r/   rR    r!   r   <module>rd      s?   " " " " " "       ' ' ' ' ' ' G G G G G G G G	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 4 3 3 3 3 3 / / / / / /		8	$	$ OSW W W W Wt1 1 1 1 1 1r!   