o
    ?Hh                     @   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
sad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 Z*dd Z+e)  d'dd Z,d'd!d"Z-g d#Z.ejdkrd d$l/m0Z0 e.d%g7 Z.dS dS )(    N)util)loadsHIGHEST_PROTOCOLc                 C   s   |t | < d S N)_dispatch_table)type_reduce_function r	   g/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/joblib/externals/loky/backend/reduction.pyregister   s   r   c                 C   s.   | j d u rt| j| jjffS t| j | jjff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      d S r   r	   )selfr	   r	   r
   f,   s   z_C.fc                 C   r   r   r	   )clsr	   r	   r
   h/      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      r&   c                 C   s   t j| g|R i |S r   )	functoolspartial)r"   r#   r$   r	   r	   r
   r!   F   r'   r!   win32   )_mk_inheritable)_win_reduction)cloudpickler.   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yZ } zd|  d}|j	d | f|j	dd   |_	|j	d |_
|d }~ww td	| rb| 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|| |  nq|| _d S )Ndispatch_table)_loky_pickler_clsmror   
isinstancetypesMemberDescriptorType__set__r4   )r   r4   ancestor_classdt_attributer	   r	   r
   _set_dispatch_table   s   

zAset_loky_pickler.<locals>.CustomizablePickler._set_dispatch_tableNc                    sr    j | ||d |d u ri }t| drt| j}ntj }|t | | |	 D ]
\}}| 
|| q,d S )N)protocolr4   )__init__hasattrdictr4   copyregcopyupdater   r=   itemsr   )r   writerreducersr>   loky_dttypereduce_funcloky_pickler_clsr	   r
   r?      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)r4   )r   rI   rJ   r	   r	   r
   r      s   z6set_loky_pickler.<locals>.CustomizablePickler.register)r   r   r   r5   r=   r   r?   r   r	   rK   r	   r
   CustomizablePickler   s
    rM   )ENV_LOKY_PICKLER_loky_pickler_namejoblib.externals.cloudpickler2   	importlibr3   PicklerImportErrorAttributeErrorr#   msgr   debug_LokyPickler)loky_picklerr3   module_picklee
extra_inforM   r	   rK   r
   set_loky_pickler_   s:   
 
6r\   c                   C      t S r   )rO   r	   r	   r	   r
   get_loky_pickler_name   r   r^   c                   C   r]   r   )rW   r	   r	   r	   r
   get_loky_pickler   r   r_   c                 C   s   t |||d|  dS )z1Replacement for pickle.dump() using _LokyPickler.rG   r>   N)rW   dump)objfilerG   r>   r	   r	   r
   ra      s   ra   c                 C   s    t  }t| |||d | S )Nr`   )ioBytesIOra   	getbuffer)rb   rG   r>   bufr	   r	   r
   dumps   s   rh   )ra   rh   r   r   r\   )	duplicateri   r   )NN)1rB   rd   r(   r8   sysosmultiprocessingr   r/   r   r   r   r   r   r   rI   r   r   r@   r    listappendint__add__r&   r!   r)   platform_posix_reductionr,   r1   r-   joblib.externalsr.   DEFAULT_ENVrS   environgetrN   rW   rO   r\   r^   r_   ra   rh   __all__multiprocessing.reductionri   r	   r	   r	   r
   <module>   sX   
		


`


