U
    /e                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlmZ eej	edkZ
ejZeeZdd Zdeddd	Zd
dddZdS )    )annotationsN)parsez2.0.0c                 C  sn   | j jd\}}}|dkr0dd l}t| |jS |dkrPdd l}t| |jjj	S |dkrft| t
tfS dS d S )N.numpyr   pandasbuiltinsF)	__class__
__module__	partitionr   
isinstanceZndarrayr   coreZgenericZNDFramestrbytes)xmod_nppd r   ?/tmp/pip-unpacked-wheel-g426oqom/distributed/protocol/pickle.py_always_use_pickle_for   s    r   )buffer_callbackprotocolc                C  s  g }d|pt i}|d dkr.|dk	r.|j|d< zj|  tj| f|}d|ksltrtt| ddt	
 krt|dk st| s|  t	j| f|}W nb tk
r   z|  t	j| f|}W n2 tk
r } ztd| |  W 5 d}~X Y nX Y nX |dk	r|D ]}|| q
|S )	zManage between cloudpickle and pickle

    1.  Try pickle
    2.  If it is short then check if it contains __main__
    3.  If it is long, then first check type, then check __main__
    r      Nr   s   __main____name__i  z%Failed to serialize %s. Exception: %s)HIGHEST_PROTOCOLappendclearpickledumpsCLOUDPICKLE_GTE_20getattrinspect	getmodulecloudpickleZlist_registry_pickle_by_valuelenr   	Exceptionloggerinfo)r   r   r   buffersZdump_kwargsresultebr   r   r   r   !   s8    

r   r   r)   c                C  sX   z$|rt j| |dW S t | W S W n. tk
rR   tjd| d d dd  Y nX d S )Nr-   zFailed to deserialize %si'  T)exc_info)r   loadsr&   r'   r(   )r   r)   r   r   r   r/   D   s    r/   )
__future__r   r"   loggingr   r$   Zpackaging.versionr   parse_version__version__r    r   	getLoggerr   r'   r   r   r/   r   r   r   r   <module>   s   
#