o
    tBh%                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlZzd dlmZ	 W n e
y5   d dlmZ	 d dlZY nw d dlmZ ejdkrWejdd dkrQd 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sd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rd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Z0dd  Z1d!d" Z2e0  d#d$ Zd,d%d&Z3d,d'd(Z4g d)Z5ejdkre5d*g7 Z5d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 )_ReducerRegistryzRegistry 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 ~/var/www/html/riverr-enterprise-integrations-main/venv/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                       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|| |  nq|| _d S )Nr   )_loky_pickler_clsmror&   
isinstancetypesMemberDescriptorType__set__r   )r.   r   ancestor_classdt_attributer   r   r   _set_dispatch_table   s   

zAset_loky_pickler.<locals>.CustomizablePickler._set_dispatch_tableNc                    s    j | ||d |d u ri }tjdk r! j | _| jtj nt| dr,t	| j}nt
j }|tj | | | D ]
\}}| || q@d S )N)protocolr   r   )__init__r   r   dispatchcopyupdater
   r   hasattrdictcopyregrO   itemsr   )r.   writerreducersrP   loky_dtr   r   loky_pickler_clsr   r   rQ      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   rR   r   )r.   r   r   r   r   r   r   r      r   z6set_loky_pickler.<locals>.CustomizablePickler.register)r   r    r!   rG   rO   r   rQ   r   r   r\   r   r   CustomizablePickler   s
    r^   )ENV_LOKY_PICKLER_loky_pickler_namejoblib.externals.cloudpicklerE   	importlibrF   PicklerImportErrorAttributeErrorformatr7   msgr   debug_LokyPickler)loky_picklerrF   module_picklee
extra_infor^   r   r\   r   set_loky_pickler   s8   
 	Brn   c                   C      t S r$   )r`   r   r   r   r   get_loky_pickler_name   r1   rp   c                   C   ro   r$   )ri   r   r   r   r   get_loky_pickler   r1   rq   c                 C   s&   t jdk rt| tjr|  } t| S )Nr   )r   r   rI   ioBytesIOgetvaluepickle_loads)bufr   r   r   r      s   r   c                 C   s   t |||d|  dS )z1Replacement for pickle.dump() using _LokyPickler.rZ   rP   N)ri   dump)r   filerZ   rP   r   r   r   rx     s   rx   c                 C   s2   t  }t| |||d tjdk r| S | S )Nrw   r   )rr   rs   rx   r   r   rt   	getbuffer)r   rZ   rP   rv   r   r   r   dumps  s
   
r{   )rx   r{   r   r   rn   r	   r$   )NN)6rr   osr   r<   multiprocessingr   rJ   cPickler   ru   rd   rB   rW   r   platformr   multiprocessing.reductionr	   multiprocessing.forkingobjectr
   r   r+   r,   r   r/   r0   rU   r4   listappendint__add__r:   r5   r=   _posix_reductionr?   rD   r@   joblib.externalsrA   DEFAULT_ENVenvirongetr_   ri   r`   rn   rp   rq   rx   r{   __all__r   r   r   r   <module>   sj   


"	


h


