U
    -eV                    @  s  d Z ddlmZ ddddddd	d
ddddddddddddddgZdZddlZddlmZ ddlmZ	 eZ
ddlZddlZdadaejdk Zejd k Zejd!k Zejd"k ZddlZdd#lmZmZ dd$lmZmZ dd%lmZ dd&lmZ  dd'l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) e*Z+e,Z-e,e.Z/e,e0Z1e2Z3e,Z4e5Z6dd(l!m7Z8m9Z9 dd)lm:Z:m;Z;m<Z<m=Z=m>Z> ddl?Z@ddlAZAddlBZBddlCZCddlDZDdd*lEmFZFmGZGmHZH dd+lImJZJ dd,lKmLZLmMZM dd-lNmOZO dd.lPmQZQmRZR dZSddlTZUeVeUjWjXZXzddlYZYd/ZZe[eYd0 Z\W n e]k
r&   dZZdZ\Y nX da^da_da`z*eUjWa bd1sPe]d2d/a^d/a_d/a`W n e]k
rt   Y nX d3d4 Zct`rd5d6 Zdd7d8 Zed9d: Zfnd;d6 Zdd<d8 Zed=d: Zfdd>l!mgZgmhZhmiZimjZjmkZkmlZl e,d?d@ djmd Zne,eOeodAdBZpe,eqeres Zte,eQdZue,eRdCZvzddDlNmwZx W n e]k
rN   dZxY nX eyexe,s`dZxdEdF ZzezdGddHZ{ezdIdJdHZ|ezdKdJdHZ}ezdGdJdHZ~ezdLdJdHZzHddMlmZ ezdIdJedNZezdKdJedNZezdGdJedNZezdLdJedNZW n& e]k
r   d Z Z ZZY nX ddOlmZ d ZZddPlmZ ddQlmZ zeZdZdRZW nF ek
r   dZze,eZW n ek
r   dZY nX dSZY nX ddlZddlZG dTdU dUeZddVlmZ ddWlmZmZ dZdZdAZdXd Zd$dYdZd%dZdZd&d[dZd'd\dZG d]d^ d^eZG d_d dee<ZG d`d dee=ZG dad dee>ZG dbd deZG dcd	 d	eZej Zddd Zded
 Zdfdg Zd(dhdiZdjdk Zee Zeepeteuevdl ejdmk redneni eJ Ze{e}e~ee|eeeedo	Zee,i  e,i  e,i  e,e e,e e,e dp er`eedq< erveedr< eeds< ejdtkrddul!mZ e,eeeeofedv< zddlZejedw< W n e]k
r   Y nX ee ee Z[edxdy e D Zdzd{ Zd|d} Zd~d ZŐd)ddZG dd dZdddddgZeD ]*\ZZZe[e"eʃrFeZeˠ͡ Z qrqFee΃ddddddgZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd deZG dd deZG dd deZeۃ Zi Zzee8e݃eB kZW n erk
r4   dZY nX [dZedZd*ddZdd Zd+ddZdd Zd,ddZdd Zd-ddZdd Zdd Zdd Zd.ddZdd Zd/ddZdd ZdejdfddÄZee"ddń ZddǄ ZeeddɄ Ze	seސ	rdd˄ Zndd˄ ZeeJfD ]FZe ZeeD ]0\ZZe,eee Zeejk	r>eeje< 	q>	q,[[[[[ee-dd΄ ZeejddЄ Zeedd҄ Zee ddԄ Zddք Z dd؄ Zee{ee}ee~eeee|ddڄ Ze
r6eeeeeeeeddڄ Ze
r`eedd݄ Zeedd߄ Zexdk	
rddlNmZ eexdd Zeetdd Ze\
ree$dd Znee$dd Ze\seekeegeejeeieehdd Z	neekeegdd Z	eendd Z
eސrJee8dd Znee8dd Zee3dd Zee6ee/ee1dd Zdd Zd0ddZeeFdd ZeeGeeHdd Zdd Zdd Zee(d d Zdd Zdd Zee4d1ddZeeeeCjdd	 ZeeeeeeCjeeCjd
d Zee#dd Z eZre[eYd0reYj!j"Z#eYj$eYj%eYj$fe#_&eYj'e#_(eYj!j)Z*eYj'eYj%fe*_&eYj$e*_(eYj!j+Z,eYj'fe,_&eYj$e,_(eYj!j-Z.eYj'fe._&eYj$e._(eYj!j/Z0eYj'fe0_&eYj%e0_(eYj!j1Z2eYj'eYj%fe2_&eYj3e2_(eYj!j4Z5eYj'eYj$fe5_&eYj!j6Z7eYj'eYj$fe7_&eYj!j8Z9eYj'eYj%fe9_&eYj!j:Z;eYj'eYj$fe;_&e#eY<e#eYj$eY=ddZ>e,e>Z?ee?dd Z@e?ed< e?ed< eAe? ndZ>e[eDdreeDjBdd ZCe[eDdr:ee,eDjDdd ZEe[eDdrfee,eDjFdd ZGe[eDdreeDjHdd ZId2ddZJdd ZKd3d d!ZLd"d# ZMbb[dS (4  aK  
dill: a utility for serialization of python objects

The primary functions in `dill` are :func:`dump` and
:func:`dumps` for serialization ("pickling") to a
file or to a string, respectively, and :func:`load`
and :func:`loads` for deserialization ("unpickling"),
similarly, from a file or from a string. Other notable
functions are :func:`~dill.dump_module` and
:func:`~dill.load_module`, which are used to save and
restore module objects, including an intepreter session.

Based on code written by Oren Tirosh and Armin Ronacher.
Extended to a (near) full set of the builtin types (in types module),
and coded to the pickle interface, by <mmckerns@caltech.edu>.
Initial port to python3 by Jonathan Dobson, continued by mmckerns.
Tested against "all" python types (Std. Lib. CH 1-15 @ 2.7) by mmckerns.
Tested against CH16+ Std. Lib. ... TBD.
    )annotationsdumpdumpsloadloadscopyPickler	UnpicklerregisterpicklepicklescheckDEFAULT_PROTOCOLHIGHEST_PROTOCOLHANDLE_FMODECONTENTS_FMODE
FILE_FMODEPickleErrorPickleWarningPicklingErrorPicklingWarningUnpicklingErrorUnpicklingWarningdillN   )adapter)traceFi  i  	i  
i )_Picklerr	   )GLOBALPOP)LockType)RLock)CodeTypeFunctionType
MethodTypeGeneratorTypeTracebackType	FrameType
ModuleTypeBuiltinMethodType)MappingProxyType	new_class)r   r   r   r   r   )ReferenceType	ProxyTypeCallableProxyType)OrderedDict)EnumEnumMeta)partial)
itemgetter
attrgetterT	pythonapinumpyzNo module named 'numpy'c                   C  s(   ddl ma ddl ma ddl ma dS )Nr   )ufunc)ndarray)dtypeT)r6   r7   NumpyUfuncTyper8   NumpyArrayTyper9   
NumpyDType r=   r=   K/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/dill/_dill.py__hook__i   s    r?   c                 C  s>   t dd | jD rdS t  | jtjk	s6| jtjk	r:dS dS )Nc                 s  s   | ]}|j |jfd kV  qdS ))r6   r8   N
__module____name__.0cr=   r=   r>   	<genexpr>q   s     z*ndarraysubclassinstance.<locals>.<genexpr>FT)all__mro__r?   __reduce_ex__r;   
__reduce__obj_typer=   r=   r>   ndarraysubclassinstancep   s    
rM   c                 C  s   t dd | jD S )Nc                 s  s   | ]}|j |jfd kV  qdS ))r6   r7   Nr@   rC   r=   r=   r>   rF   {   s     znumpyufunc.<locals>.<genexpr>)anyrH   rK   r=   r=   r>   
numpyufuncz   s    rO   c                 C  s*   t dd | jD rdS t  | ttkS )Nc                 s  s   | ]}|j |jfd kV  qdS ))r6   r9   Nr@   rC   r=   r=   r>   rF   }   s     znumpydtype.<locals>.<genexpr>F)rG   rH   r?   typer<   rK   r=   r=   r>   
numpydtype|   s    rQ   c                 C  s   dS NFr=   objr=   r=   r>   rM          c                 C  s   dS rR   r=   rS   r=   r=   r>   rO      rU   c                 C  s   dS rR   r=   rS   r=   r=   r>   rQ      rU   )GetSetDescriptorTypeClassMethodDescriptorTypeWrapperDescriptorTypeMethodDescriptorTypeMemberDescriptorTypeMethodWrapperTypec                   s    fddS )Nc                   s    S Nr=   )yxr=   r>   <lambda>   rU   z<lambda>.<locals>.<lambda>r=   r^   r=   r^   r>   r`      rU   r`      base__repr__)_lru_cache_wrapperc                  O  s4   | dtj}|tjf| |}t|}|  |S )Nopen)pop__builtin__rf   osdevnullrP   close)argskwargsrf   ftr=   r=   r>   get_file_type   s
    rp   rb)	bufferingrzr+bwb)rf   )rr   rf   )BytesIO)socket)_reduce_socket)exitquitget_ipythonr=   c                   @  sB   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dS )SentinelzH
    Create a unique sentinel object that is pickled as a constant.
    Nc                 C  s,   || _ |d kr"t jjd | _n|| _d S )NrB   )nameinspectcurrentframef_back	f_globalsrA   )selfr}   module_namer=   r=   r>   __init__   s    zSentinel.__init__c                 C  s   | j d | j S )N.)rA   r}   r   r=   r=   r>   rd      s    zSentinel.__repr__c                 C  s   | S r\   r=   r   r=   r=   r>   __copy__   s    zSentinel.__copy__c                 C  s   | S r\   r=   )r   memor=   r=   r>   __deepcopy__   s    zSentinel.__deepcopy__c                 C  s   | j S r\   r}   r   r=   r=   r>   rJ      s    zSentinel.__reduce__c                 C  s   | j S r\   r   )r   protocolr=   r=   r>   rI      s    zSentinel.__reduce_ex__)N)
rB   rA   __qualname____doc__r   rd   r   r   rJ   rI   r=   r=   r=   r>   r|      s   
r|   )_shims)ReduceGetattrc                 O  s*   | dtjd }tt| f|||dS )z
    Use pickling to 'copy' an object (i.e. `loads(dumps(obj))`).

    See :func:`dumps` and :func:`loads` for keyword arguments.
    ignore)r   )rg   r	   settingsr   r   )rT   rl   kwdsr   r=   r=   r>   r      s    c           	      K  sX   ddl m } |dkr|d nt|}| }|t|||d t||f||  dS )zS
    Pickle an object to a file.

    See :func:`dumps` for keyword arguments.
    r   r   Nr   )byreffmoderecurse)r   intr   updatedictr   r   )	rT   filer   r   r   r   r   r   Z_kwdsr=   r=   r>   r      s    c                 K  s$   t  }t| |||||f| | S )a  
    Pickle an object to a string.

    *protocol* is the pickler protocol, as defined for Python *pickle*.

    If *byref=True*, then dill behaves a lot more like pickle as certain
    objects (like modules) are pickled by reference as opposed to attempting
    to pickle the object itself.

    If *recurse=True*, then objects referred to in the global dictionary
    are recursively traced and pickled, instead of the default behavior
    of attempting to store the entire global dictionary. This is needed for
    functions defined via *exec()*.

    *fmode* (:const:`HANDLE_FMODE`, :const:`CONTENTS_FMODE`,
    or :const:`FILE_FMODE`) indicates how file handles will be pickled.
    For example, when pickling a data file handle for transfer to a remote
    compute service, *FILE_FMODE* will include the file contents in the
    pickle and cursor position so that a remote method can operate
    transparently on an object with an open file handle.

    Default values for keyword arguments can be set in :mod:`dill.settings`.
    )StringIOr   getvalue)rT   r   r   r   r   r   r   r=   r=   r>   r      s    c                 K  s   t | fd|i| S )zW
    Unpickle an object from a file.

    See :func:`loads` for keyword arguments.
    r   )r	   r   )r   r   r   r=   r=   r>   r     s    c                 K  s   t | }t||f|S )ah  
    Unpickle an object from a string.

    If *ignore=False* then objects whose class is defined in the module
    *__main__* are updated to reference the existing class in *__main__*,
    otherwise they are left to refer to the reconstructed type, which may
    be different.

    Default values for keyword arguments can be set in :mod:`dill.settings`.
    )r   r   )strr   r   r   r=   r=   r>   r   !  s    c                   @  s   e Zd ZdddZdd ZdS )MetaCatchingDictNc                 C  s(   z
| | W S  t k
r"   | Y S X d S r\   )KeyError)r   keydefaultr=   r=   r>   get:  s    
zMetaCatchingDict.getc                 C  s   t |trtS t d S r\   )
issubclassrP   	save_typer   )r   r   r=   r=   r>   __missing__@  s    
zMetaCatchingDict.__missing__)N)rB   rA   r   r   r   r=   r=   r=   r>   r   9  s   
r   c                   @  s   e Zd ZdS )r   NrB   rA   r   r=   r=   r=   r>   r   F  s   c                   @  s   e Zd ZdS )r   Nr   r=   r=   r=   r>   r   I  s   c                   @  s   e Zd ZdS )r   Nr   r=   r=   r=   r>   r   L  s   c                   @  sf   e Zd ZU dZeej Zded< dZ	ddl
m
Z
 dd Zdd
dZejje_dd Zejje_dS )r   z1python's Pickler extended to interpreter sessionsz?typing.Dict[type, typing.Callable[[Pickler, typing.Any], None]]dispatchFr   r   c                 O  s   t j}|dd }|dd }|dd }tj| |f|| t| _i | _|d krZ|d n|| _d| _	|d krv|d n|| _
|d kr|d n|| _t | _|| _d S )Nr   r   r   F)r   r   rg   StockPicklerr   _main_module_mainZ_diff_cache_byref	_strictio_fmode_recurser/   	_postproc_file)r   r   rl   r   r   r   r   r   r=   r=   r>   r   ]  s    zPickler.__init__Tc                 C  s   t |}trf|t ksf|tjksft|r6t|dd }t|rNt|dd }t|rft|dd }tr|t	krdt	 }t
|t| || d S )Nc                 S  sB   t | d| t|dt|dd }tj| ||d t | d d S )NzNu: %sr   rB   r   # Nu)loggerr   getattrr   save_globalpicklerrT   r}   r=   r=   r>   save_numpy_ufunct  s
    z&Pickler.save.<locals>.save_numpy_ufuncc                 S  s2   t | d| | jt|jf|d t | d d S )NzDt: %srS   z# Dt)r   r   save_reduce_create_dtypemetarP   r   rT   r=   r=   r>   save_numpy_dtype  s    z&Pickler.save.<locals>.save_numpy_dtypec                 S  sV   t | d|j|j t|dd }| \}}}| jt||||f|d t | d d S )NzNu: (%s, %s)__dict__rS   r   )r   r   shaper9   r   rJ   r   _create_array)r   rT   npdictrn   rl   stater=   r=   r>   save_numpy_array  s    z&Pickler.save.<locals>.save_numpy_arrayz;Can't pickle %s: attribute lookup builtins.generator failed)rP   r;   r   r   rO   r
   rQ   rM   GENERATOR_FAILr%   r   r   save)r   rT   save_persistent_idrL   r   r   r   msgr=   r=   r>   r   m  s    


	zPickler.savec                 C  s   t |  t| | d S r\   )r   Ztrace_setupr   r   r   rT   r=   r=   r>   r     s    
zPickler.dumpN)T)rB   rA   r   r   r   r   r   r   __annotations___sessionr   r   r   r   r=   r=   r=   r>   r   P  s   


1
c                   @  sB   e Zd ZdZddlmZ dZdd Zdd Zd	d
 Ze	jje_dS )r	   zBpython's Unpickler extended to interpreter sessions and more typesr   r   Fc                 C  sB   ||fdkr| j jS ||fdkr(td S |dkr4d}t| ||S )N)rh   __main__)rh   ZNoneTypez	dill.dill
dill._dill)r   r   rP   StockUnpickler
find_class)r   moduler}   r=   r=   r>   r     s     zUnpickler.find_classc                 O  sD   t j}|dd }tj| f|| t| _|d kr:|d n|| _d S )Nr   )r   r   rg   r   r   r   r   _ignore)r   rl   r   r   r   r=   r=   r>   r     s
    zUnpickler.__init__c              	   C  s\   t | }t|jttddkrX| jsXzt| jt|j|_	W n t
tfk
rV   Y nX |S )NrB   r   )r   r   rP   rA   r   r   r   r   rB   	__class__AttributeError	TypeErrorr   r=   r=   r>   r     s    
  zUnpickler.loadN)
rB   rA   r   r   r   r   r   r   r   r   r=   r=   r=   r>   r	     s   	
c                 C  s   |t j| < dS )zBexpose :attr:`~Pickler.dispatch` table for user-created extensionsNr   r   ro   funcr=   r=   r>   r     s    
c                   s    fdd}|S )zHdecorator to register types to Pickler's :attr:`~Pickler.dispatch` tablec                   s   | t j < | S r\   r   r   ro   r=   r>   proxy  s    
zregister.<locals>.proxyr=   )ro   r   r=   r   r>   r
     s    c                  C  sD   t tj D ]0\} }|jtkrtj| = | tkrt|  tj| < qdS )z7drop dill-registered types from pickle's dispatch tableN)listr   r   itemsrA   rB   pickle_dispatch_copy)rP   r   r=   r=   r>   _revert_extension  s
    
r   c                 C  sF   | a t rBtdkrBzddlm} W n tk
r<   ddl}Y nX |adS )a  
    Reduces size of pickles by only including object which have changed.

    Decreases pickle size but increases CPU time needed.
    Also helps avoid some unpickleable objects.
    MUST be called at start of script, otherwise changes will not be recorded.
    Nr   )diffr   )	_use_diffr    ImportError)ondr=   r=   r>   use_diff  s    	r   c                  c  sd   dd l } tttj t| j   }|D ].\}}t|dd dkr0t|tkr0||fV  q0d S )Nr   rA   builtins)typesr   r   rh   r   r   r   rP   )r   r   r   valuer=   r=   r>   _create_typemap  s    

r   )PartialType	SuperTypeItemGetterTypeAttrGetterTypei CellType)	FileTypeBufferedRandomTypeBufferedReaderTypeBufferedWriterTypeTextWrapperTypePyBufferedRandomTypePyBufferedReaderTypePyBufferedWriterTypePyTextWrapperType)ZDictKeysTypeZDictValuesTypeZDictItemsTypeZOdictKeysTypeZOdictValuesTypeZOdictItemsTypeExitType	InputType
OutputTypei )GenericAliasZGenericAliasIteratorTypeHKEYTypec                 c  s   | ]\}}||fV  qd S r\   r=   )rD   kvr=   r=   r>   rF   F  s     rF   c                 C  s
   t | S r\   )marshalr   )stringr=   r=   r>   
_unmarshalH  s    r   c                 C  s   t |  S r\   )_reverse_typemapr   r=   r=   r>   
_load_typeK  s    r  c                 G  s   | | S r\   r=   )Ztypeobjrl   r=   r=   r>   _create_typeN  s    r  c                 C  sV   t | |pt |||}|d k	r*|j| |d k	r8||_d|jkrRt d |jd< |S )N__builtins__)r#   r   r   r   __kwdefaults____globals__globals)ZfcodeZfglobalsfnameZ	fdefaultsZfclosureZfdictZfkwdefaultsr   r=   r=   r>   _create_functionQ  s    
r  c                   @  sD   e Zd ZdZdd Zdd Zdd Zdd	 Zed
d Z	dd Z
dS )matchaI  
    Make avaialable a limited structural pattern matching-like syntax for Python < 3.10

    Patterns can be only tuples (without types) currently.
    Inspired by the package pattern-matching-PEP634.

    Usage:
    >>> with match(args) as m:
    >>>     if   m.case(('x', 'y')):
    >>>         # use m.x and m.y
    >>>     elif m.case(('x', 'y', 'z')):
    >>>         # use m.x, m.y and m.z

    Equivalent native code for Python >= 3.10:
    >>> match args:
    >>>     case (x, y):
    >>>         # use x and y
    >>>     case (x, y, z):
    >>>         # use x, y and z
    c                 C  s   || _ d | _d S r\   )r   _fields)r   r   r=   r=   r>   r   v  s    zmatch.__init__c                 C  s   | S r\   r=   r   r=   r=   r>   	__enter__y  s    zmatch.__enter__c                 G  s   dS rR   r=   )r   exc_infor=   r=   r>   __exit__{  s    zmatch.__exit__c                 C  s    t | jt |krdS || _dS )zjust handles tuple patternsFT)lenr   rl   )r   rl   r=   r=   r>   case}  s    z
match.casec                 C  s$   | j d krtt| j| j| _ | j S r\   )r
  r   ziprl   r   r   r=   r=   r>   fields  s    
zmatch.fieldsc                 C  s
   | j | S r\   r  r   itemr=   r=   r>   __getattr__  s    zmatch.__getattr__N)rB   rA   r   r   r   r  r  r  propertyr  r  r=   r=   r=   r>   r	  a  s   
r	  )      aco_endlinetablezargcount posonlyargcount kwonlyargcount nlocals stacksize flags code consts names varnames filename name qualname firstlineno linetable endlinetable columntable exceptiontable freevars cellvars)r  r  co_exceptiontablezargcount posonlyargcount kwonlyargcount nlocals stacksize flags code consts names varnames filename name qualname firstlineno linetable                          exceptiontable freevars cellvars)r  
   co_linetablezargcount posonlyargcount kwonlyargcount nlocals stacksize flags code consts names varnames filename name          firstlineno linetable                                         freevars cellvars)r     co_posonlyargcountzargcount posonlyargcount kwonlyargcount nlocals stacksize flags code consts names varnames filename name          firstlineno lnotab                                            freevars cellvars)r     co_kwonlyargcountzargcount                 kwonlyargcount nlocals stacksize flags code consts names varnames filename name          firstlineno lnotab                                            freevars cellvarscodelnotab	linetableendlinetablecolumntableexceptiontablec               
     sT  t | d ts| ^}} nd}t| }|drtdkrt| d d t| d dr`| d  n| d f| dd t| d dr| d  n| d t| d	 dr| d	  n| d	 | d
 | d f W  5 Q R  S |j n|drtdkstdkrvt| d d t| d dr"| d  n| d f| dd t| d drP| d  n| d | d | d	 f W  5 Q R  S |j tdkr|j	 d< n|r|n|j	 d< n.|drDtdkr<t| d d t| d dr| d  n| d f| dd t| d dr| d  n| d | d | d f W  5 Q R  S |j n|drtdkrt| d d t| d dr| d  n| d f| dd dd | dd D | d | d f W  5 Q R  S |j nt
dW 5 Q R X  dd  d|  dd  d d   d d  d!d   d"d   fd#dtD } t|  S )$Nr   rU   )argcountposonlyargcountkwonlyargcountnlocals	stacksizeflagsr'  constsnamesvarnamesfilenamer}   qualnamefirstlinenor)  r,  freevarscellvarsr     encoder%              )r-  r.  r/  r0  r1  r2  r'  r3  r4  r5  r6  r}   r8  LNOTAB_OR_LINETABLEr9  r:  r  r!     r)  r(  )r-  r/  r0  r1  r2  r'  r3  r4  r5  r6  r}   r8  r(  r9  r:  r$        )r-  r.  r/  r0  r1  r2  r'  r3  r4  r5  r6  r}   r7  r8  r)  r*  r+  r,  r9  r:  r  c                 s  s$   | ]}t |d r| n|V  qdS r<  N)hasattrr<  )rD   r  r=   r=   r>   rF     s     z_create_code.<locals>.<genexpr>      z$pattern match for code object failedr.  r7  r}   r,  r*  r+  c                 3  s8   | ]0}|t kr(t | d r( |  n | V  qdS rE  )ENCODE_PARAMSrF  r<  )rD   r   r  r=   r>   rF     s   )
isinstancer   r	  r  CODE_VERSIONr"   rF  r<  r  rA  r   
setdefaultCODE_PARAMS)rl   ZLNOTABmr=   r  r>   _create_code  s    


 
  	

"
"


"
"

"

rO  c                 C  s(   |d kri }|d krd}| |f||S )Nr=   r=   )Zftypeobjr   rl   r   r=   r=   r>   _create_ftype  s
    rP  c                 G  s0   | st jd dS | dkr&t jd S t j|  S )Nr=   r=   )typingTuple	copy_with)Zargzrl   r=   r=   r>   _create_typing_tuple  s
    
rU  c                 G  s,   ddl m} | }| r(|ds(td|S )Nr   )LockFCannot acquire lock)	threadingrV  acquirer   )lockedrl   rV  lockr=   r=   r>   _create_lock  s    
r\  c                 G  s4   t  }|d k	r|| |f |r0| s0td|S )NrW  )	RLockType_acquire_restore	_is_ownedr   )countownerrl   r[  r=   r=   r>   _create_rlock  s    rb  c              	   C  sH  t jt jt jd}| t| kr.||  }	n| dkrBt }	n| dkr`dd l}
|
	|}	nztj
| }W n tk
r   d}Y nX |s|rtd|  nd|kr|tkrd} d}ntj
| }||kr|rtdn|tkr|}z|tkr4|| d	|kr|nd	}	|	| d	|kr|	  || |}	n| dkrRdd l}
|
	|}	n|tkrd	|kspd
|krtj}d|kr|tjO }n
|tjO }tt| ||}	t|	d|	}t|d|}| |_|	j| kstn
|| |}	W n. ttfk
r   t  d }t|Y nX |r&|	  n|dkrD|tkrD|	 | |	S )N)z<stdin>z<stdout>z<stderr>z	<tmpfile>z<fdopen>r   Fz)[Errno 2] No such file or directory: '%s'rs   zinvalid buffer sizewr_   +bufferrawr   )!sys	__stdin__
__stdout__
__stderr__r   keysri   ZtmpfiletempfileTemporaryFilepathexists	ExceptionFileNotFoundErrorr   getsize
ValueErrorr   writerk   O_CREATO_RDWRO_WRONLYfdopenrf   r   r}   AssertionErrorIOErrorr  r   r   seek)r}   modepositionclosedrf   strictior   fdatar4  rn   rl  ro  Zcurrent_sizer2  rs   errr=   r=   r>   _create_filehandle  sv    










r  c                 C  s$   t | }|r|  n
|| |S r\   )r   rk   r{  r   r}  r~  rn   r=   r=   r>   _create_stringi`  s
     

r  c                 C  s,   t  }|r|  n||  || |S r\   )r   rk   rt  r{  r  r=   r=   r>   _create_stringof  s     


r  c                   @  s   e Zd Zdd Zdd ZdS )_itemgetter_helperc                 C  s
   g | _ d S r\   r   r   r=   r=   r>   r   o  s    z_itemgetter_helper.__init__c                 C  s   | j | d S r\   )r   appendr  r=   r=   r>   __getitem__q  s    z_itemgetter_helper.__getitem__N)rB   rA   r   r   r  r=   r=   r=   r>   r  n  s   r  c                   @  s   e Zd ZdddZdd ZdS )_attrgetter_helperNc                 C  s   || _ || _d S r\   )attrsindex)r   r  r  r=   r=   r>   r   v  s    z_attrgetter_helper.__init__c                 C  sX   t | d}t | d}|d kr4t|}|| nd|| |g||< t| ||S )Nr  r  r   )object__getattribute__r  r  joinrP   )r   attrr  r  r=   r=   r>   r  y  s    z#_attrgetter_helper.__getattribute__)N)rB   rA   r   r   r  r=   r=   r=   r>   r  u  s   
r  c                   @  s   e Zd Zdd ZdS )_dictproxy_helperc                 C  s   |S r\   r=   )r   r  r=   r=   r>   __ror__  s    z_dictproxy_helper.__ror__N)rB   rA   r   r  r=   r=   r=   r>   r    s   r  _CELL_EMPTYc                   s   | t k	r|   fddjd S )Nc                     s    S r\   r=   r=   r   r=   r>   r`     rU   z_create_cell.<locals>.<lambda>r   )r  __closure__)contentsr=   r  r>   _create_cell  s    r  c                 G  s>   ddl m} | d kr0ddlm} || f| S || f| S )Nr   )refUserDict)weakrefr  collectionsr  )rT   rl   r  r  r=   r=   r>   _create_weakref  s
    r  c                 G  sT   ddl m} | d krF|r*|dd f| S ddlm} || f| S || f| S )Nr   )r   c                 S  s   | S r\   r=   r^   r=   r=   r>   r`     rU   z#_create_weakproxy.<locals>.<lambda>r  )r  r   r  r  )rT   callablerl   r   r  r=   r=   r>   _create_weakproxy  s     r  c                 C  s   t | S r\   )eval)repr_strr=   r=   r>   
_eval_repr  s    r  c                 C  s*   | | }| | |d k	r&|j| |S r\   )__setstate__r   r   )rn   rl   r   r   arrayr=   r=   r>   r     s
    
r   c                 C  s&   t dkrt  | d krt S tt | S )NT)r<   r?   rP   )Zscalar_typer=   r=   r>   r     s
     r   c                 C  s>   t |d |  dd}|d k	r |S dd l}|j| |||d}|S )Nr   Tsafer   )defaultsr   )_import_moduler  
namedtuple)r}   
fieldnames
modulenamer  class_r  ro   r=   r=   r>   _create_namedtuple  s    r  c              	   C  s   d}z| d}td|dd D ]b}|d|}zt|d }W n tk
rX   Y nX |}	|dd  D ]}
t|	|
}	qj|	}d} qq$W n tk
r   Y nX |rt||r|S t	dt
||f nt| ||}t|| |S d S )NFutf8r   r   r   Tz;%s object exists at %s but a PyCapsule object was expected.)decoderanger`  rsplit
__import__r   r   rp  _PyCapsule_IsValidr   rP   _PyCapsule_New_PyCapsule_SetContext)pointerr}   context
destructorZ
attr_foundunameir4  r   rT   r  Zcapsuler=   r=   r>   _create_capsule  s0    



r  c                 C  s   z$| dd }t|d | d W S  tk
r   z*| j}t|tkrR|| }n
t| |}W n" ttfk
r   t| |}Y nX | Y S X d S )N'r  z.__dict__["z"])	splitr  rp  r   rP   DictProxyTyper   r   r   )Zobjclassr}   r  r  r=   r=   r>   _getattr  s    
r  c                 C  s   t | |d pt t|S r\   )r   rh   )r   r}   r=   r=   r>   	_get_attr  s    r  c              
   C  s   zf|  drtj|  W S d| krF| d}d|d d }|d }n
t| W S tt|d d |g|W S  ttt	fk
r   |rY d S  Y nX d S )Nz__runtime__.r   rt   )

startswithrg  modulesr  r  r  r   r   r   r   )import_namer  r   r   rT   r=   r=   r>   r    s    



r  c              	   C  sh   | dD ]T}|dkr&td|| z| }t| |} W q
 tk
r\   td|| Y q
X q
| |fS )Nr   z<locals>z&Can't get local attribute {!r} on {!r}z Can't get attribute {!r} on {!r})r  r   formatr   )rT   r}   subpathparentr=   r=   r>   _getattribute  s      r  c                 C  s   t | dd }|dks6|r:t|ddr:|jr:||jjkr:dS t| drt|dd}zt|| j\}}|| kW S  t	k
r   Y dS X nt|d | j dd}|| kS d S )	NrA   )r   NFchildr   Tr  r   )
r   is_dillr   r   rB   rF  r  r  r   r   )rT   r   r   r   found_r=   r=   r>   _locate_function  s(    




r  c                 C  s   |  D ]\}}|| |< qd S r\   r  )destsourcer   r   r=   r=   r>   	_setitems)  s    r  c           	      C  s:  |t jkrt|}|d kr&t| dd}|r|d kr6g }t|| jkrt|drfd|jt|d|j	f nd}t
d||f t | | d S || jt|< | j|d|i |r6| jt|}t|D ]l}|d	 tkr |d
 \}}|r| | | jt| d	  | t|  nqn
| j|  | t qd S )NTr  rA   z%s.%s r   r   zPCannot pickle %r: %shas recursive self-references that trigger a RecursionError.rT   r   r   )r   
NO_DEFAULTr   r  idr   rF  rA   r   rB   warningswarnr   r   r   rg   reversedr  rt  r   r   _batch_setitemsiterr   r   )	r   Z	reductionZis_pickler_dillrT   postproc_listr}   postprocr  r  r=   r=   r>   _save_with_postproc.  s2    
&

r  c                 C  s  t | d| t|drt|j|j|j|j|j|j|j	|j
|j|j|j|j|j|j|j|j|j|j|j|j|jf}njt|drt h tstjdtd |j|j|j|j|j|j|j	|j
|j|j|j|j|j|j|j|j|j|j|jf}W 5 Q R X nt|drL|j|j|j|j|j|j|j	|j
|j|j|j|j|j|j|j|j|jf}nt|dr|j|j|j|j|j|j	|j
|j|j|j|j|j|j|j|j|jf}n@|j|j|j|j|j	|j
|j|j|j|j|j|j|j|j|jf}| jt||d t | d	 d S )
NzCo: %sr  r  r   )categoryr   r#  rS   z# Co)r   r   rF  	co_lnotabco_argcountr#  r&  
co_nlocalsco_stacksizeco_flagsco_code	co_constsco_namesco_varnamesco_filenameco_nameZco_qualnameco_firstlinenor   r  Zco_columntabler  co_freevarsco_cellvarsr  catch_warningsOLD312a7filterwarningsDeprecationWarningr   rO  r   rT   rl   r=   r=   r>   	save_codeg  s    
             


            	          	          
          r  c                 C  s   dt | jt| f S )z3Make a short string representation of a dictionary.z<%s object at %#012x>)rP   rB   r  rS   r=   r=   r>   
_repr_dict  s    r  c                 C  sb  t | ddrV|| jjkrV| jr$| jsVt| dt| | t	dd t| d nt | dds|t
jkrt| dt| | t	dd t| d	 nd
|kr|t
jkrt|d
 tkr|tt|d
 ddd krt| dt| | t	d|d
  d t| d nFt| dt| t | ddrF| jrFd| _t| | t| d d S )NFr  zD1: %szc__builtin__
__main__
zUTF-8z# D1zD3: %szc__main__
__dict__
z# D3rB   Tr   zD4: %szc%s
__dict__
z# D4zD2: %sz# D2)r  r   r   r   Z_first_passr   r   r  rt  bytesr   rP   r   r   r  r   	save_dictr   r=   r=   r>   save_module_dict  s4    r  c                   s   dd  fdddD S )Nc                   s    fdd}|S )Nc                   s:   t | d| |jtB }| j |f|d t | d d S )Nz
Dkvi: <%s>rS   z# Dkvi)r   r   mapping_dictproxy_helper_instancer   r   rT   r  r   r=   r>   _save_dict_view  s    
zLsave_dict_view.<locals>.save_dict_view_for_function.<locals>._save_dict_viewr=   )r   r  r=   r   r>   save_dict_view_for_function  s    z3save_dict_view.<locals>.save_dict_view_for_functionc                   s   g | ]}|t  |fqS r=   )r   )rD   funcnamedicttyper  r=   r>   
<listcomp>  s   z"save_dict_view.<locals>.<listcomp>)rk  valuesr   r=   r  r=   r  r>   save_dict_view  s    r  c                   s:    fdd} fdd} fdd}d|fd|fd	|ffS )
Nc                   sF   t | d| t jt|f}| j j|f|d t | d d S )NzDk: <%s>rS   z# Dk)r   r   r   r   fromkeysr   r   rk  r   rT   Zdict_constructorr  r=   r>   save_dict_keys  s    z&save_dict_view.<locals>.save_dict_keysc                   sD   t | d| t t|f}| j j|f|d t | d d S )NzDv: <%s>rS   z# Dv)r   r   r   r   	enumerater   r  r  r  r=   r>   save_dict_values  s    z(save_dict_view.<locals>.save_dict_valuesc                   s6   t | d| | j j |f|d t | d d S )NzDi: <%s>rS   z# Di)r   r   r   r   r   r  r=   r>   save_dict_items  s    z'save_dict_view.<locals>.save_dict_itemsrk  r  r   r=   )r  r  r  r  r=   r  r>   r    s    c                 C  s   t || sBt| d| | jt|j|j|jf|d t| d n>t| d| t|dt|dd }t	j
| ||d t| d d S )	NzC1: %srS   z# C1zC2: %sr   rB   r   z# C2)r  r   r   r   	ClassTyperB   	__bases__r   r   r   r   r   r=   r=   r>   save_classobj  s    
r  c                 C  s   |j }t| tkrFt| d| tj| || d t| d nx|jt	kr|r\|dkrt| d| | j
t|f|d t| d n4t| d| tj
| f| d	|i t| d
 d S )NzGa0: %sr   z# Ga0rQ  zGa1: %srS   z# Ga1zGa2: %srT   z# Ga2)__args__rP   rJ   r   r   r   r   r   
__origin__tupler   rU  r  r=   r=   r>   save_generic_alias  s    r  c                 C  s4   t | d| | jt| f|d t | d d S )NzLo: %srS   z# Lo)r   r   r   r\  rZ  r   r=   r=   r>   	save_lock  s    r  c                 C  st   t | d| | }t|dd  d d}t|dd  d }| jt||f|d t | d d S )	NzRL: %szcount=r   r   >zowner=rS   z# RL)r   r   rd   r   r  rstripr   rb  )r   rT   rs   r`  ra  r=   r=   r>   
save_rlock  s     r  c                 C  s,   t | d| | jt|  t | d d S )NzSo: %sz# So)r   r   r   reduce_socketr   r=   r=   r>   save_socket*  s    r  c              
   C  s   |j rd}n*|  |tjtjtjfkr.d}n| }t| ddrj| jt	krj||j
d}| }|  nd}t| ddr| j}| j}nd}d}| jt|j
|j||j ||||f|d d S )	Nr   rt   Tr  rs   r   FrS   )r~  flushrg  ri  rj  rh  tellr  r   r   r}   readrk   r   r   r  r|  )r   rT   open_r}  rn   r  r  r   r=   r=   r>   
_save_file0  s4    
   r  c                 C  s*   t | d| t| |t}t | d |S NzFi: %sz# Fi)r   r   r  rf   r   rT   rn   r=   r=   r>   	save_fileK  s    r  c                 C  s*   t | d| t| |t}t | d |S r  )r   r   r  _openr  r=   r=   r>   r  W  s    c                 C  sV   t | d| |jrd}d}n| }| }| jt|||jf|d t | d d S NzIo: %sr   r   rS   z# Io)r   r   r~  r   r  r   r  r   rT   r   r}  r=   r=   r>   save_stringif  s      
r  c                 C  sV   t | d| |jrd}d}n| }| }| jt|||jf|d t | d d S r  )r   r   r~  r   r  r   r  r  r=   r=   r>   save_stringor  s      
r  )	lru_cachec                 C  s~   t | d| tr$| }|jf}n| }|d |d f}|tjkrVtt|dd}nt}| j	||j
f|d t | d d S )NzLRU: %smaxsizetypedT)Zis_callablerS   z# LRU)r   r   OLD39
cache_infor!  Zcache_parametersr   __defaults__r   r   __wrapped__)r   rT   rm   rl   wrapperr=   r=   r>   save_lru_cache  s    

r(  c                 C  s6   t | d| | jt|j|jf|d t | d d S )NzSu: %srS   z# Su)r   r   r   super__thisclass____self__r   r=   r=   r>   
save_super  s    r,  c                 C  s   t |jdd }|d k	rjt|tk	rjt |j|j|krjt| d| | jt |j|jf|d t| d d S t| d| | jt	|j|jf|d t| d d S )N__code__zMe2: %srS   z# Me2Me1: %s# Me1)
r   __func__rP   r"   r+  rB   r   r   r   r$   )r   rT   r'  r=   r=   r>   save_instancemethod0  s    r1  c                 C  s6   t | d| | jt|j|jf|d t | d d S )Nr.  rS   r/  )r   r   r   r$   r0  r+  r   r=   r=   r>   r1    s    c                 C  s<   t | d| | jt|j|j| f|d t | d d S NzWr: %srS   z# Wrr   r   r   r  __objclass__rB   rd   r   r=   r=   r>   save_wrapper_descriptor  s    r5  c                 C  s<   t | d| | jt|j|j| f|d t | d d S r2  r3  r   r=   r=   r>   r5    s    c                 C  s(  z
|j }W n` tk
rj   t| d| | jttjf|d | tj|df | 	t
 t| d Y d S X t| ddrt|| jkr| jt| }ntt| j d }|d k	rt| d| | jttf|d |tj|d|ff t| d d S t| d	| | jt|f|d t| d
 d S )NzCe3: %srS   cell_contentsz# Ce3Tr  zCe2: %sz# Ce2zCe1: %sz# Ce1)r6  rs  r   r   r   r  r   r  Z_delattrrt  r   r  r  r   nextr  r  	_CELL_REFr  Z_setattr)r   rT   rn   r  r=   r=   r>   	save_cell  s.    


r9  c                 C  s<   t | dt| |tB }| jt|f|d t | d d S NzMp: %srS   z# Mp)r   r   r  r  r   r  r  r=   r=   r>   save_dictproxy  s
    r;  c                 C  s8   t | dt| | jt| f|d t | d d S r:  )r   r   r  r   r  r   r   r=   r=   r>   r;    s    c                 C  s:   t | d| | jt|j|j|jf|d t | d d S )NzSl: %srS   z# Sl)r   r   r   slicestartstopstepr   r=   r=   r>   
save_slice  s    r@  c                 C  s4   t | d| | jt| f|d t | d d S )NzSi: %srS   z# Si)r   r   r   r  rd   r   r=   r=   r>   save_singleton  s    rA  c                 C  s   t | }zt| }W n tk
r0   td Y S X ||krBt| S z t|ddd dd}W n| tk
r   tst|ddd dd}nFt	t
 }|D ] }t ||krt|   Y S qdt|  }t|Y nX |S )z.get memory address of proxy's reference objectNr  z at rt   r?  rb   z)Cannot reference object for proxy at '%s')reprr   ReferenceErrorr  r   r  r  rs  IS_PYPYr  gcget_objects)rT   _repr_straddressobjects_objr   r=   r=   r>   _proxy_helper  s&        rL  c                 C  s   dddg}|D ]}| t |kr|  S q|r<t|j }ntt }|D ]}| t |krL|  S qLzt| } W n$ tk
r   tdt|  Y nX t	d|  dS )zCget object located at the given memory address (inverse of id(obj))NTFz"'%s' is not a valid memory addresszCannot reference object at '%s')
r  r  r   r  rE  rF  hexr   r   rC  )rI  r   specialrT   rJ  r=   r=   r>   _locate_object)  s    
 
 
 rO  c                 C  s6   | }t | d| | jt|f|d t | d d S )NzR1: %srS   z# R1)r   r   r   r  r   rT   Zrefobjr=   r=   r>   save_weakref9  s
    rQ  c                 C  sD   t | d|  tt|}| jt|t|f|d t | d d S )NzR2: %rrS   z# R2)r   r   rO  rL  r   r  r  rP  r=   r=   r>   save_weakproxyB  s
    rR  c                   s`   t  dsdS  jd krdS dddddg}tjjt fd	d
|D p^ jtp^d jkS )N__file__TFbase_prefixbase_exec_prefixexec_prefixprefixreal_prefixc                 3  sD   | ]<}t t|r jtt|p: jtt|V  qd S r\   )rF  rg  rS  r  r   )rD   r}   r   rpr=   r>   rF   U  s   
z%_is_builtin_module.<locals>.<genexpr>zsite-packages)rF  rS  ri   rn  realpathrN   endswithEXTENSION_SUFFIXES)r   r4  r=   rY  r>   _is_builtin_moduleL  s    
 
 
r^  c                 C  s   t | dd d k	p| tj kS )N
__loader__)r   rg  r  r  )r   r=   r=   r>   _is_imported_module_  s    r`  c                 C  s&  t|}t| ddo|| jk}|jdkr,|r0|rt| d| t	|rL|jnd|j }|j
 }dD ]}||d  qdtD ]"}t||ddd	rz||= qz| jt|f||d
 t| d nb|jdkrt| d| | j|dd t| d n.t| d| | jt|jf|d t| d d S )NTr  )r   r   r   zM1: %sz__runtime__.%s)r  r_  rA   r   ZIPython)rT   r   z# M1r   zM2: %sZ_dillr   z# M2rS   )r   RuntimeErrorr   r  r^  r  r   rB   r   r`  r   r   rg   IPYTHON_SINGLETONSr   r   r  r   r   )r   rT   Zbuiltin_modZis_session_mainmod_nameZ	main_dictr  r=   r=   r>   save_moduleb  s.    

rd  c           
   	   C  s   t | jdkr| jd j}n i }t| jD ]}||j q*g }t|D ]<\}}z|| }	||	krn|| W qJ tk
r   Y qJX qJ|D ]}t	|| qt
t| tr|	dd |	dd ||fS )zDRetrieve a copy of the dict of a class without the inherited methodsr   r   r   N__weakref__)r  r  r   r  r   r   r   r  r   rg   r   rP   )
clsZclsdictr  r  Zinherited_dictrc   Z	to_remover}   r   Z
base_valuer=   r=   r>   _get_typedict_type  s&    rg  c                   s   t tdr<t| \}}}}| j | fdd|D  n:t | drl| j}| j | fdd|D  n
td| d|kr|dd  |dd  |dd  n|d	d  ||fS )
N	_get_dumpc                 3  s   | ]} | ffV  qd S r\   r=   rD   regr
   r=   r>   rF     s     z$_get_typedict_abc.<locals>.<genexpr>_abc_registryc                 3  s   | ]} |ffV  qd S r\   r=   ri  rk  r=   r>   rF     s     zCannot find registry of ABC %s
_abc_cache_abc_negative_cache	_abc_impl)rF  abcrh  r
   extendrl  r   rg   )rT   _dictr  r  registryr  r=   rk  r>   _get_typedict_abc  s    


rt  c                   sD   t kr<t| d  | jtt   f d t| d n jtfkrt fdddD rt| d  t dt d	d } j	|kr|d krg }|
t d|ff  jst| t j	 j jff |d
 n6 fdd jD }t| t j	 j j|ff |d
 t| d d S  td krVt| d  | td  t| d n tkrt| d  | jttf d t| d n tkrt| d  | jttf d t| d nv tkr t| d  | td  t| d n@t| dd }t t| ddk}t |  }|s|s|r|d krLg }t| d  t  j d |\}}	|dd}
t|
tkr|
f}
|
D ]}| |d  qt! t"j#rt| d  t$ ||	|\}}	t| d t dd }|	d k	r"|	% D ]\}}|
t ||ff q|d k	r@|
t d|ff t& dsrt| t't  j	 j|ff |d
 nDdt i}|rt(t)|d}nd }t| t* j	 j+||ff |d
 t| d n|t dt d	d }t| d  |rt,j-d f t.dd |r$t,j-d   j|f t.dd t/j0|  |d! t| d" d S )#NzT1: %srS   z# T1c                   s   g | ]}t  |qS r=   )rF  )rD   r  rS   r=   r>   r    s     zsave_type.<locals>.<listcomp>)r
  _asdict_make_replacezT6: %sr   rB   rT   r  c                   s    g | ]}| j kr j | qS r=   )_field_defaults)rD   fieldrS   r=   r>   r    s     
 z# T6zT7: %ss   __builtin__
NoneType
z# T7s   enum
EnumMeta
r   r   r=   zT2: %s	__slots__zABC: %sz# ABC__orig_bases__	metaclass)r  z# T2zT4: %szCannot locate reference to %r.r  )
stacklevelzTCannot pickle %r: %s.%s has recursive self-references that trigger a RecursionError.r   z# T4)1_typemapr   r   r   r  r  r  rG   r   rB   r  setattrry  r  r  r
  rA   rP   rt  r   NotImplementedTypeNotImplementedEllipsisTypeEllipsisr1   r  r  rg  r   r   r   r   rg   rJ  rp  ABCMetart  r   rF  r  r   r  r+   r|  r  r  r   r   r   )r   rT   r  obj_namer  r   Zobj_recursiveZincorrectly_namedrr  r  slotsr}   r7  r   r   Z	_metadictZ_dict_updater=   rS   r>   r     s    &
""





         
	r   c                 C  sB   t | d| | jt||j|j|j|jf|d t | d d S )NzPr: %srS   z# Pr)r   r   r   rP   fgetfsetfdelr   r   r=   r=   r>   save_property=  s
    r  c                 C  s:   t | d| |j}| jt||f|d t | d d S )NzCm: %srS   z# Cm)r   r   r0  r   rP   )r   rT   Z	orig_funcr=   r=   r>   save_classmethodE  s    
r  c              	   C  s  t || sLt|jtk	rt|dd }|d kr4tj}t|dd}d}z(t||j	\}}t|dd |krjd}W n t
k
r   Y nX |rt| d| | jt|df|d t| d d S t| d	| t| d
d }t| dd }t| dd }	t| dt}
g }|r&ddlm} ||ddd}d|ji}nl|j}|	rR||
jkrRt| d|
j}|}n@|d k	r|jd k	rtt|jddd |kr|}n
d|ji}|d k	r||k	rdd | D }|D ],}||kr|| t||ff  qq|t||ff |j}i }dD ]$}t||d }|d k	r
|||< q
|j	|jkrH|j	|d< d|ksb|j|d krl|j|d< |j}t|tk	r||d< d }|r||f}t| t|j||j|j|f|f||d |r>tt| d }|r>|r>|D ]T}t|d|ff}z|| W n tk
r$   Y qY nX | j|  |  t! qt| d n>t| d| t|dt|dd }t"j#| ||d t| d d S )NrA   Tr  Fr0  zF3: %srS   z# F3zF1: %sr   r   _main_modified_original_mainr   )
globalvars)r   builtinrB   r   r   c                 S  s   h | ]}t |qS r=   )r  )rD   gr=   r=   r>   	<setcomp>  s     z save_function.<locals>.<setcomp>)r   r  r   r   rx  r6  z# F1zF2: %sr   z# F2)$r  rP   r-  r"   r   rh   rB   r  r  r   r   r   r   r   detectr  rA   r  r   r  r  r  r  r   r  r  r%  r7  r  r  removers  rt  r   r   r   )r   rT   r   r   Z_pypy_builtinr  r  r   r   r  r  r  r  Z
globs_copyZglobsZglob_idsZstack_elementclosureZ
state_dictZ	fattrnameZfattrr   Ztopmost_postproccellZpossible_postprocr}   r=   r=   r>   save_functionX  s    





    
r  s   dill._dill._testcapsulec                 C  sX   t | d| t|}t||}t|}t|}| jt||||f|d t | d d S )NzCap: %srS   z# Cap)r   r   _PyCapsule_GetName_PyCapsule_GetPointer_PyCapsule_GetContext_PyCapsule_GetDestructorr   r  )r   rT   r}   r  r  r  r=   r=   r>   save_capsule  s    
r  PyCapsuleType_HAS_DEFAULT_FACTORY_CLASSc                 C  s,   t | d| | td  t | d d S )Nz	DcHDF: %ss!   dataclasses
_HAS_DEFAULT_FACTORY
z# DcHDFr   r   rt  r   r   r=   r=   r>   *save_dataclasses_HAS_DEFAULT_FACTORY_CLASS  s    r  MISSINGc                 C  s,   t | d| | td  t | d d S )NzDcM: %ss   dataclasses
MISSING
z# DcMr  r   r=   r=   r>   save_dataclasses_MISSING_TYPE  s    r  KW_ONLYc                 C  s,   t | d| | td  t | d d S )Nz	DcKWO: %ss   dataclasses
KW_ONLY
z# DcKWOr  r   r=   r=   r>   save_dataclasses_KW_ONLY_TYPE  s    r  _FIELD_BASEc                 C  s:   t | d| | td |j  d  t | d d S )NzDcFB: %ss   dataclasses
   
z# DcFB)r   r   rt  r   r}   r<  r   r=   r=   r>   save_dataclasses_FIELD_BASE  s    r  c              	   K  s   |rt f}ntttttf}zt| f|}zt| |  k}W n8 t	tfk
rx   t
d || k}t
jrtt
jd= Y nX t|dr|  }|rW dS |st|t| k}|r|W S tt|tt| kW S W dS  |k
r   Y dS X dS )a  
    Quick check if object pickles with dill.

    If *exact=True* then an equality test is done to check if the reconstructed
    object matches the original object.

    If *safe=True* then any exception will raised in copy signal that the
    object is not picklable, otherwise only pickling errors will be trapped.

    Additional keyword arguments are as :func:`dumps` and :func:`loads`.
    r   r   toarrayTFN)rp  r   ry  NotImplementedErrorr   r   r   boolrG   r   r  r  filtersrF  r  rP   rB  )rT   exactr  r   
exceptionsZpikresultr=   r=   r>   r     s0     
 
  c           
      O  s   | dd}| dd}|dkr.ddl}|j}t|t ddl}d}zt| f||}d}W 5 |rn|rntd X d|t|f }	|	|	
dd	sd
nd}	|rt|	 dS )a$  
    Check pickling of an object across another process.

    *python* is the path to the python interpreter (defaults to sys.executable)

    Set *verbose=True* to print the unpickled object in the other process.

    Additional keyword arguments are as :func:`dumps` and :func:`loads`.
    verboseFpythonNr   TzDUMP FAILEDz(%s -c import dill; print(dill.loads(%s))ra   SUCCESSzLOAD FAILED)rg   rg  
executablerJ  r   
subprocessprintr   rB  callr  )
rT   rl   r   r  r  rg  r  ZfailrK  r   r=   r=   r>   r   D  s$    

c                 C  s,   |dkst | jdsd| jkS t| j kS )z#check the dill-ness of your picklerFmror   )rF  r   rA   r   r  )r   r  r=   r=   r>   r  n  s    
r  c               	   C  sJ   t j D ]:\} }z|tj| < W q
 tk
rB   ttd|  Y q
X q
dS )z1extend pickle with all of dill's registered typeszskip: %sN)r   r   r   r   rp  r   r   r   r   r=   r=   r>   _extendt  s    r  )NNNN)NNNN)N)N)T)NNNNN)N)F)N)N)F)N)N)N)FF)N(N  r   
__future__r   __all__rA   r  r   r   r   Z_tracelogri   rg  r   r   
hexversionZOLD38r#  ZOLD310r  r   rh   r   r   r   r	   r   r   r   _threadr    r!   r]  r   r"   r#   r$   r%   r&   r'   r(   r)   
memoryviewZ
BufferTyperP   r  r  r  r  r  r<  Z	SliceTypeZTypeTyper  Z
XRangeTyper*   r  r+   r   r   r   r   r   r   r   r   rE  rp  dataclassesr  r,   r-   r.   r  r/   enumr0   r1   	functoolsr2   operatorr3   r4   r   Zimportlib.machinery	importlibr  	machineryr]  ctypesZ
HAS_CTYPESrF  rD  r   r:   r<   r;   
PathFinder	find_specr?   rM   rO   rQ   rV   rW   rX   rY   rZ   r[   r  r   r   r   r)  rp  r   r   r   r   re   ZLRUCacheTyperJ  rp   r   r   r   r   r   Z_pyiorf   r  r   r   r   r   iorv   r   r   r   rw   
SocketTypeZmultiprocessing.reductionrx   r  Z__IPYTHON__Z
IS_IPYTHONr   rb  	NameErrorry   r~   rR  r  r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Warningr   r   r   r   r   r   r
   r   r   r   r   r   r_   Z_incedental_reverse_typemaprk  r  r   r   r  r   winregr   setZ_incedental_typesr  r   r  r  r  r	  ZALL_CODE_PARAMSversionnew_attrparamsrK  r  rM  intersectionrI  rO  rP  rU  r\  rb  r  r  r  r  r  r  r  Z__dZMAPPING_PROXY_TRICKr8  r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  Z
__dicttypeZ__objZ
__funcnameZ
__savefuncr   Z__tviewr  _GenericAliasr  r  r  r  r  r  r  r  r   r(  r,  r1  r5  r9  r;  r@  rA  rL  rO  rQ  rR  r^  r`  rd  rg  rt  r   r  abstractpropertyr  staticmethodclassmethodabstractstaticmethodabstractclassmethodr  r  r5   ZPyCapsule_Newr  Zc_void_pc_char_pZargtypesZ	py_objectrestypeZPyCapsule_GetPointerr  ZPyCapsule_GetDestructorr  ZPyCapsule_GetContextr  ZPyCapsule_GetNamer  ZPyCapsule_IsValidr  Zc_boolZPyCapsule_SetContextr  ZPyCapsule_SetDestructorZ_PyCapsule_SetDestructorZPyCapsule_SetNameZ_PyCapsule_SetNameZPyCapsule_SetPointerZ_PyCapsule_SetPointercastcreate_string_bufferZ_testcapsuler  r  addr  r  r  r  r  r  r  r  r   r   r  r  r=   r=   r=   r>   <module>   sL                   



(


 
  

	U&
	
 	







     
/
\	G
9
:











,


1z


q	

%*
