o
    l¨Êh|  ã                   @   s�   d dl Z d dlmZ zd dlmZmZ dZW n ey!   dZY nw eƒ Z	G dd„ de
ƒZG dd	„ d	eƒZd
d„ Zdd„ Zdd„ Zddd„ZdS )é    N)Úpartial)ÚdumpsÚloadsTFc                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚCloudpickledObjectWrapperFc                 C   s   || _ || _d S ©N©Ú_objÚ_keep_wrapper)ÚselfÚobjÚkeep_wrapper© r   ú[/var/www/html/env/lib/python3.10/site-packages/joblib/externals/loky/cloudpickle_wrapper.pyÚ__init__   s   
z"CloudpickledObjectWrapper.__init__c                 C   s(   t | jƒ}| jst|ffS t|| jffS r   )r   r   r	   r   Ú_reconstruct_wrapper)r
   Ú_pickled_objectr   r   r   Ú
__reduce__   s   

z$CloudpickledObjectWrapper.__reduce__c                 C   s   |dvr
t | j|ƒS t | |ƒS )Nr   )Úgetattrr   )r
   Úattrr   r   r   Ú__getattr__   s   
z%CloudpickledObjectWrapper.__getattr__N)F)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s    
r   c                   @   s   e Zd Zdd„ ZdS )ÚCallableObjectWrapperc                 O   s   | j |i |¤ŽS r   )r   ©r
   ÚargsÚkwargsr   r   r   Ú__call__%   s   zCallableObjectWrapper.__call__N)r   r   r   r   r   r   r   r   r   #   s    r   c                 C   s    t | ƒr
t| |d�S t| |d�S )N©r   )Úcallabler   r   )r   r   r   r   r   Ú_wrap_non_picklable_objects)   s   r    c                 C   s   t | ƒ}t||ƒS r   )r   r    )r   r   r   r   r   r   r   /   s   
r   c                 C   sÎ   t s| S dt| ddƒv }t| tƒr-tt| jƒgdd„ | jD ƒ¢R i dd„ | j ¡ D ƒ¤ŽS t	| ƒrNt| ddƒ}|t|d	d
ƒt
j@ O }t| ddƒ}|d|v O }|sR| S t | ¡}|d u ret| dd�}|t| < |S )NÚ__main__r   Ú c                 S   s   g | ]}t |ƒ‘qS r   ©Ú_wrap_objects_when_needed)Ú.0Úar   r   r   Ú
<listcomp>>   s    z-_wrap_objects_when_needed.<locals>.<listcomp>c                 S   s   i | ]	\}}|t |ƒ“qS r   r#   )r%   ÚkÚvr   r   r   Ú
<dictcomp>?   s    ÿz-_wrap_objects_when_needed.<locals>.<dictcomp>Ú__code__Úco_flagsr   r   z<lambda>Fr   )Úcloudpickler   Ú
isinstancer   r$   Úfuncr   ÚkeywordsÚitemsr   ÚinspectÚ	CO_NESTEDÚ
WRAP_CACHEÚgetr    )r   Ú	need_wrapÚ	func_codeÚ	func_nameÚwrapped_objr   r   r   r$   4   s2   
ÿþÿý
r$   c                    sD   t stdƒ‚t ˆ¡rG ‡ ‡fdd„dtƒ}ˆj|_|S tˆˆ d�S )a˜  Wrapper for non-picklable object to use cloudpickle to serialize them.

    Note that this wrapper tends to slow down the serialization process as it
    is done with cloudpickle which is typically slower compared to pickle. The
    proper way to solve serialization issues is to avoid defining functions and
    objects in the main scripts and to implement __reduce__ functions for
    complex classes.
    zŒcould not from joblib.externals import cloudpickle. Please install cloudpickle to allow extended serialization. (`pip install cloudpickle`).c                       s   e Zd Z‡ ‡fdd„ZdS )z<wrap_non_picklable_objects.<locals>.CloudpickledClassWrapperc                    s   ˆ|i |¤Ž| _ ˆ | _d S r   r   r   ©r   r   r   r   r   h   s   
zEwrap_non_picklable_objects.<locals>.CloudpickledClassWrapper.__init__N)r   r   r   r   r   r:   r   r   ÚCloudpickledClassWrapperg   s    r;   r   )r-   ÚImportErrorr2   Úisclassr   r   r    )r   r   r;   r   r:   r   Úwrap_non_picklable_objectsV   s   	
r>   )T)r2   Ú	functoolsr   Újoblib.externals.cloudpickler   r   r-   r<   Údictr4   Úobjectr   r   r    r   r$   r>   r   r   r   r   Ú<module>   s    ÿ"