o
    l¨ÊhG   ã                   @   s
  d dl Z d dlZd dlZd dlZd dlmZ zd dlmZ W n e	y1   d dl
mZ d dlZY nw d dl
mZ ejdkrSejdd… dkrMd dlmZ nd dlmZ G d	d
„ d
eƒZej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	yÈ   dZ)Y nw ej* +de)¡Z,da-da.d+dd„Z/dd „ Z0d!d"„ Z1e/ƒ  d#d$„ Zd,d%d&„Z2d,d'd(„Z3g d)¢Z4ejdk�re4d*g7 Z4dS dS )-é    N)Úutil)Úloads)ÚHIGHEST_PROTOCOLÚwin32é   ©é   r   )Ú	duplicatec                   @   s    e Zd ZdZi Zedd„ ƒZdS )Ú_ReducerRegistryzßRegistry for custom reducers.

    HIGHEST_PROTOCOL is selected by default as this pickler is used
    to pickle ephemeral datastructures for interprocess communication
    hence no backward compatibility is required.

    c                    s2   t jdk r‡ fdd„}|| j|< dS ˆ | j|< dS )z@Attach a reducer function to a given type in the dispatch table.©r   c                    ó   ˆ |ƒ}| j |d|iŽ d S ©NÚobj©Úsave_reduce)Úclsr   Úreduced©Úreduce_func© úY/var/www/html/env/lib/python3.10/site-packages/joblib/externals/loky/backend/reduction.pyÚ
dispatcher?   ó   z-_ReducerRegistry.register.<locals>.dispatcherN)ÚsysÚversion_infoÚdispatch_table)r   Útyper   r   r   r   r   Úregister9   ó   
z_ReducerRegistry.registerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úclassmethodr   r   r   r   r   r
   (   s
    r
   c                 C   s.   | j d u rt| j| jjffS t| j | jjffS ©N)Ú__self__ÚgetattrÚ	__class__Ú__func__r   ©Úmr   r   r   Ú_reduce_methodN   s   
r+   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )Ú_Cc                 C   ó   d S r$   r   )Úselfr   r   r   ÚfV   s   z_C.fc                 C   r-   r$   r   )r   r   r   r   ÚhY   ó   z_C.hN)r   r    r!   r/   r#   r0   r   r   r   r   r,   U   s    r,   Úpypy_version_infoc                 C   s   t | j| jffS r$   )r&   Ú__objclass__r   r)   r   r   r   Ú_reduce_method_descriptord   s   r4   c                 C   s   t | j| j| jp	i ffS r$   )Ú_rebuild_partialÚfuncÚargsÚkeywords)Úpr   r   r   Ú_reduce_partiall   ó   r:   c                 C   s   t j| g|¢R i |¤ŽS r$   )Ú	functoolsÚpartial)r6   r7   r8   r   r   r   r5   p   r;   r5   é   )Ú_mk_inheritable)Ú_win_reduction)ÚcloudpicklerA   ÚpickleÚLOKY_PICKLERc              
      sì   | d u rt } d ‰ | dv rd} | tkrd S | dkrddlm‰  n;zddlm} || ƒ}|j‰ W n+ ttfyY } zd 	| ¡}|j
d | f|j
dd …  |_
|j
d |_|‚d }~ww t d 	| rb| nd¡¡ G ‡ fd	d
„d
ˆ ƒ}|a| ad S )N)Ú NrA   r   )ÚCloudPickler)Úimport_modulez‡
This error occurred while setting loky_pickler to '{}', as required by the env variable LOKY_PICKLER or the function set_loky_pickler.r>   zUsing '{}' for serialization.c                       sb   e Zd Z” Zejdk r” j ¡ Ze 	e
j¡ nej ¡ Ze 	e
j¡ def‡ fdd„	Zdd„ ZdS )z-set_loky_pickler.<locals>.CustomizablePicklerr   Nc                    s†   ˆ j | ||d� |d u ri }tjdk r| j ¡ | _nt| dd ƒd ur,| j | j	 ¡ ¡ n| j	 ¡ | _| 
¡ D ]
\}}|  ||¡ q6d S )N)Úprotocolr   r   )Ú__init__r   r   Ú	_dispatchÚcopyÚdispatchr&   r   ÚupdateÚ_dispatch_tableÚitemsr   )r.   ÚwriterÚreducersrG   r   r   ©Úloky_pickler_clsr   r   rH   ¸   s   
ÿz6set_loky_pickler.<locals>.CustomizablePickler.__init__c                    s2   t jdk r‡ fdd„}|| j|< dS ˆ | j|< dS )zMAttach a reducer function to a given type in the dispatch table.
            r   c                    r   r   r   )r.   r   r   r   r   r   r   Í   r   zJset_loky_pickler.<locals>.CustomizablePickler.register.<locals>.dispatcherN)r   r   rK   r   )r.   r   r   r   r   r   r   r   Ç   r   z6set_loky_pickler.<locals>.CustomizablePickler.register)r   r    r!   Ú_loky_pickler_clsr   r   rK   rJ   rI   rL   r
   r   ÚcopyregrM   r   rH   r   r   rQ   r   r   ÚCustomizablePicklerª   s    


rU   )ÚENV_LOKY_PICKLERÚ_loky_pickler_nameÚjoblib.externals.cloudpicklerE   Ú	importlibrF   ÚPicklerÚImportErrorÚAttributeErrorÚformatr7   Úmsgr   ÚdebugÚ_LokyPickler)Úloky_picklerrF   Úmodule_pickleÚeÚ
extra_inforU   r   rQ   r   Úset_loky_picklerˆ   s8   
ý €ù	ÿ*re   c                   C   ó   t S r$   )rW   r   r   r   r   Úget_loky_pickler_nameØ   r1   rg   c                   C   rf   r$   )r`   r   r   r   r   Úget_loky_picklerÝ   r1   rh   c                 C   s&   t jdk rt| tjƒr|  ¡ } t| ƒS )Nr   )r   r   Ú
isinstanceÚioÚBytesIOÚgetvalueÚpickle_loads)Úbufr   r   r   r   æ   s   r   c                 C   s   t |||d� | ¡ dS )z1Replacement for pickle.dump() using _LokyPickler.©rP   rG   N)r`   Údump)r   ÚfilerP   rG   r   r   r   rp   í   s   rp   c                 C   s2   t  ¡ }t| |||d� tjdk r| ¡ S | ¡ S )Nro   r   )rj   rk   rp   r   r   rl   Ú	getbuffer)r   rP   rG   rn   r   r   r   Údumpsó   s
   
rs   )rp   rs   r   r   re   r	   r$   )NN)5rj   Úosr   r<   Úmultiprocessingr   ÚcPickler   rm   r[   rB   rT   r   Úplatformr   Úmultiprocessing.reductionr	   Úmultiprocessing.forkingÚobjectr
   r   r+   r,   r   r/   r0   Úhasattrr4   ÚlistÚappendÚintÚ__add__r:   r5   r=   Ú_posix_reductionr?   rD   r@   Újoblib.externalsrA   ÚDEFAULT_ENVÚenvironÚgetrV   r`   rW   re   rg   rh   rp   rs   Ú__all__r   r   r   r   Ú<module>   sh   
þ

"	

þ
P


ÿ