U
    ªº|e—  ã                   @   s°  d dl Z d dlZd dl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
 i Zdd„ Zdd„ ZG dd	„ d	ƒZeeeƒ jƒeƒ eeejƒeƒ eed
ƒsÂdd„ Zeeejƒeƒ eeejƒeƒ dd„ Zdd„ Zeejeƒ ejdkröddlmZ nddlmZ zd dl m!Z! dZ"W n e#k
�r0   dZ"Y nX ej$ %de"¡Z&da'da(d&dd„Z)dd„ Z*dd„ Z+e)ƒ  d'dd „Z,d(d!d"„Z-d d"d#ddgZ.ejdk�r¬d d$l/m0Z0 e.d%g7 Z.dS ))é    N)Úutil)ÚloadsÚHIGHEST_PROTOCOLc                 C   s   |t | < d S ©N)Ú_dispatch_table)Útype_Zreduce_function© r   úd/var/www/website-v5/atlas_env/lib/python3.8/site-packages/joblib/externals/loky/backend/reduction.pyÚregister   s    r
   c                 C   s2   | j d krt| j| jjffS t| j | jjffS d S r   )Ú__self__ÚgetattrÚ	__class__Ú__func__Ú__name__©Úmr   r   r	   Ú_reduce_method$   s    
r   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )Ú_Cc                 C   s   d S r   r   )Úselfr   r   r	   Úf,   s    z_C.fc                 C   s   d S r   r   )Úclsr   r   r	   Úh/   s    z_C.hN)r   Ú
__module__Ú__qualname__r   Úclassmethodr   r   r   r   r	   r   +   s   r   Úpypy_version_infoc                 C   s   t | j| jffS r   )r   Ú__objclass__r   r   r   r   r	   Ú_reduce_method_descriptor:   s    r   c                 C   s   t | j| j| jpi ffS r   )Ú_rebuild_partialÚfuncÚargsÚkeywords)Úpr   r   r	   Ú_reduce_partialB   s    r#   c                 C   s   t j| f|ž|ŽS r   )Ú	functoolsÚpartial)r   r    r!   r   r   r	   r   F   s    r   Úwin32é   )Ú_mk_inheritable)Ú_win_reduction)Úcloudpickler*   ÚpickleZLOKY_PICKLERc              
      sú   | d krt } d ‰ | dkrd} | tkr(d S | dkr>ddlm‰  n‚zddlm} || ƒ}|j‰ W nb ttfk
r¾ } z@d| › d�}|j	d | f|j	dd …  |_	|j	d |_
|‚W 5 d }~X Y nX t d	| rÎ| nd› d
�¡ G ‡ fdd„dˆ ƒ}|a| ad S )N)Ú Nr*   r   )ÚCloudPickler)Úimport_modulez4
This error occurred while setting loky_pickler to 'zQ', as required by the env variable LOKY_PICKLER or the function set_loky_pickler.r'   zUsing 'z' for serialization.c                       s2   e Zd Z” Zdd„ Zdef‡ fdd„	Zdd„ ZdS )z-set_loky_pickler.<locals>.CustomizablePicklerc                 S   sB   | j  ¡ D ],}t|dd ƒ}t|tjƒr
| | |¡  q8q
|| _d S )NÚdispatch_table)Ú_loky_pickler_clsÚmror   Ú
isinstanceÚtypesÚMemberDescriptorTypeÚ__set__r/   )r   r/   Zancestor_classZdt_attributer   r   r	   Ú_set_dispatch_tableˆ   s    
zAset_loky_pickler.<locals>.CustomizablePickler._set_dispatch_tableNc                    sr   ˆ j | ||d� |d kri }t| dƒr2t| jƒ}n
tj ¡ }| t¡ |  |¡ | 	¡ D ]\}}|  
||¡ qXd S )N)Úprotocolr/   )Ú__init__ÚhasattrÚdictr/   ÚcopyregÚcopyÚupdater   r6   Úitemsr
   )r   ÚwriterÚreducersr7   Zloky_dtÚtypeÚreduce_func©Zloky_pickler_clsr   r	   r8   �   s    



z6set_loky_pickler.<locals>.CustomizablePickler.__init__c                 S   s   || j |< dS )z@Attach a reducer function to a given type in the dispatch table.N)r/   )r   rA   rB   r   r   r	   r
   ·   s    z6set_loky_pickler.<locals>.CustomizablePickler.register)r   r   r   r0   r6   r   r8   r
   r   rC   r   r	   ÚCustomizablePickler…   s   rD   )ÚENV_LOKY_PICKLERÚ_loky_pickler_nameZjoblib.externals.cloudpickler-   Ú	importlibr.   ÚPicklerÚImportErrorÚAttributeErrorr    Úmsgr   ÚdebugÚ_LokyPickler)Zloky_picklerr.   Zmodule_pickleÚeÚ
extra_inforD   r   rC   r	   Úset_loky_pickler_   s2    

ÿ ÿ6rP   c                   C   s   t S r   )rF   r   r   r   r	   Úget_loky_pickler_name¿   s    rQ   c                   C   s   t S r   )rM   r   r   r   r	   Úget_loky_picklerÄ   s    rR   c                 C   s   t |||d� | ¡ dS )z1Replacement for pickle.dump() using _LokyPickler.©r@   r7   N)rM   Údump)ÚobjÚfiler@   r7   r   r   r	   rT   Í   s    rT   c                 C   s    t  ¡ }t| |||d� | ¡ S )NrS   )ÚioÚBytesIOrT   Ú	getbuffer)rU   r@   r7   Úbufr   r   r	   ÚdumpsÓ   s    r[   r   )Ú	duplicater\   )N)NN)NN)1r;   rW   r$   r3   ÚsysÚosÚmultiprocessingr   r+   r   r   r   r
   r   r   rA   r   r   r9   r   ÚlistÚappendÚintÚ__add__r#   r   r%   ÚplatformZ_posix_reductionr(   r,   r)   Zjoblib.externalsr*   ZDEFAULT_ENVrI   ÚenvironÚgetrE   rM   rF   rP   rQ   rR   rT   r[   Ú__all__Zmultiprocessing.reductionr\   r   r   r   r	   Ú<module>   sR   		



`

