o
    ~]                     @   s  d Z g dZddlZedZee  dd Ze Z	ddl
Z
ddlZdadaejdkZer5ejd	k p9ejd
k Zejdk Zd	ej  koIdk n  ZerddlZddlmZmZ ddlmZ ejdkrlddlmZ n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+e/Z0e1Z2e+Z3e4Z5ere+e6j7Z8nCddl m9Z8 n<ddl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$m8Z8m5Z5m2Z2m%Z%m0Z0m.Z.m&Z&m'Z'm*Z*m(Z(m3Z3 ddlm<Z<m=Z=m>Z> zddlm?Z? W n e@y   e<Z?Y nw ddlAZBddlCZCddlDZDddlEmFZFmGZGmHZH ddlImJZJ ddlKmLZLmMZM ejdk r.eNZOer:ejd	k r:dZPndZPzddlQZQdZReSeQd ZTW n e@yX   dZRdZTY nw daUdaVzereeWdddlXZXeXjYZ [dsve@ddaUdaVW n- eWy   zddl\Z\e\]d daUdaVW n
 e@y   Y nw Y n
 e@y   Y nw d d! Z^tVrd"d# Z_d$d% Z`nd&d# Z_d'd% Z`ere+d(d) djad Zbne+d*d) djcd Zbejd+krdd,l mdZd eTsdd-l meZe nG d.d/ d/e6Zfe+efjgZeeTre#Zhe"Zie"Zjne+e+jkZhe+e+j7d0 Zie+e+j7erd1nd0 Zje+g jkZle+eJemd2d3Zne+eoepeq Zre+eLdZse+eMd4Ztd5d6 Zueud7dd8Zveud9d:d8Zweud;d:d8Zxeud7d:d8Zyeud<d:d8Zzz$dd=l{m|Z} eud9d:e}d>Z~eud;d:e}d>Zeud7d:e}d>Zeud<d:e}d>ZW n e@y   d Z~ Z ZZY nw zdd?lmZmZmZ W n e@y   erdd@lmZ nddAlmZ d ZZY nw eTsddBlmZ zddClmZ W n e@y   ddDlmZ Y nw zedu  dZg dEZW n ey   ze+eZW n ey   dZY nw g ZY nw dZdFZd2ZdGdH ZddIdJZddKdLZddMdNZddOdPZdQdR ZdSdT ZdUdV ZdWdX ZddZd[Zdd\d]ZG d^d_ d_eZG d`da daeZ:G dbdc dceZ	 ej Zddde Zdfdg Zdhdi ZddjdkZdldm Zee Zeebeleneresetevexeyezeweeee~dn ereedo< ereedp< eedq< eTsehedr< eieds< ejedt< neeedu< eredvdw e D Znedxdw e D Zdydz Zd{d| Zd}d~ Z		dddZdd Zdd Zdd Zdd Zdd Zdd ZG dd de6ZG dd de6Zerdd Zndd Zdd ZdddZdd ZdddZdd Zdd Zdd Zdd ZdddZdddZee!dd Zeedd Zee,dd Zeedd Zeedd ZeTszdd Zeesdd Zeetdd Zdd Zeeveexeeyeezeewdd Ze~reeeeeeee~dd Zereedd Zeedd Zeendd ZeerddĄ Zee(ddƄ Zee#ddȄ Zejd+kr'eTseeeeedeeieeheejddʄ Zneeeeedddʄ Zeeldd̈́ ZneTs6eeieehddʄ ZeebddЄ ZeTsUesMee8dd҄ Znee8dd҄ Zee2ddՄ Zee5ee.ee0ddׄ Zddل ZdddۄZeeFdd݄ ZeeGeeHdd߄ Zee'dd Zee3dd Zee߃dd Zeeeedd Zee"dd ZdddZdd ZdddZdd Zbb[dS )a  
dill: a utility for serialization of python objects

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.
Test against "all" python types (Std. Lib. CH 1-15 @ 2.7) by mmckerns.
Test against CH16+ Std. Lib. ... TBD.
)dumpdumpsloadloadsdump_sessionload_sessionPickler	UnpicklerregistercopypicklepicklescheckHIGHEST_PROTOCOLDEFAULT_PROTOCOLPicklingErrorUnpicklingErrorHANDLE_FMODECONTENTS_FMODE
FILE_FMODE    Ndillc                 C   s$   | r
t tj dS t tj dS )zCprint a trace through the stack when pickling; useful for debuggingN)logsetLevelloggingINFOWARN)boolean r   C/var/www/Datamplify/venv/lib/python3.10/site-packages/dill/_dill.py_trace   s   r   Fi   i  i
  i  )_Picklerr   )LockTypei )RLock)_RLock)CodeTypeFunctionType
MethodTypeGeneratorTypeTracebackType	FrameType
ModuleTypeBuiltinMethodType)MappingProxyType)r   r   )r%   r&   	ClassTyper'   r(   DictProxyType
XRangeType	SliceTyper)   NotImplementedTypeEllipsisTyper*   r+   
BufferTyper,   TypeType)r   r   r   )r   )ReferenceType	ProxyTypeCallableProxyType)partial)
itemgetter
attrgetterT	pythonapizfind_spec not foundnumpyzNo module named 'numpy'c                   C   s   ddl ma ddl ma dS )Nr   )ufunc)ndarrayT)r=   r>   NumpyUfuncTyper?   NumpyArrayTyper   r   r   r   __hook__y   s   rB   c                 C   s   t | ttfv r
dS z%t| dd }|d u rW dS |tu rW dS dtt|dtj vr.W dS W n ty9   Y dS  tyB   Y dS w t	  t
dd}t| jt|jkrat| jt|jkradS dS )NF	__class__znumpy.ndarraymro)r   int8T)typer5   r.   getattrstrintrD   ReferenceError	TypeErrorrB   rA   id__reduce_ex__
__reduce__)objclsNumpyInstancer   r   r   ndarraysubclassinstance   s    
rR   c                 C   s   t | ttfv r
dS z&t| dd }|d u rW dS |tu rW dS dtt|dtj vr.W dS W dS  ty:   Y dS  tyC   Y dS w )NFrC   znumpy.ufuncrD   T)	rF   r5   r.   rG   rH   rI   rD   rJ   rK   )rO   rP   r   r   r   
numpyufunc   s   rS   c                 C      dS NFr   rO   r   r   r   rR          c                 C   rT   rU   r   rV   r   r   r   rS      rW   c                        fddS )Nc                        S Nr   yxr   r   <lambda>   rW   <lambda>.<locals>.<lambda>r   r]   r   r]   r   r_          r_   c                    rX   )Nc                    rY   rZ   r   r[   r]   r   r   r_      rW   r`   r   r]   r   r]   r   r_      ra   i )GetSetDescriptorType)MemberDescriptorTypec                   @   s   e Zd ZdgZdS )_member
descriptorN)__name__
__module____qualname__	__slots__r   r   r   r   rd      s    
rd   rD   __prepare__   base__repr__c                  O   s:   | dtj}|tjg| R i |}t|}|  |S )Nopen)pop__builtin__ro   osdevnullrF   close)argskwargsro   ftr   r   r   get_file_type   s
   ry   rb)	bufferingrzr+bwb)ro   )r{   ro   )StringIO	InputType
OutputType)BytesIO)r   )socket)_reduce_socket)reduce_socket)exitquitget_ipython   c                 O   s0   | dtjd }tt| g|R i ||dS )z use pickling to 'copy' an objectignore)r   )rp   r   settingsr   r   )rO   ru   kwdsr   r   r   r   r
      s   r
   c           	      K   s\   ddl m } |du r|d nt|}| }|t|||d t||fi ||  dS )zpickle an object to a filer   r   Nprotocol)byreffmoderecurse)r   rI   r
   updatedictr   r   )	rO   filer   r   r   r   r   r   _kwdsr   r   r   r      s   r   c                 K   s(   t  }t| |||||fi | | S )zpickle an object to a string)r   r   getvalue)rO   r   r   r   r   r   r   r   r   r   r     s   r   c                 K   s   t | fd|i| S )zunpickle an object from a filer   )r   r   )r   r   r   r   r   r   r     s   r   c                 K   s   t | }t||fi |S )z unpickle an object from a string)r   r   )rH   r   r   r   r   r   r   r     s   r   c                  C   sl   ddl m}  | t}trdnd}ttj| D ]\}}|du r q|j D ]\}}|| 	||f q%q|S )zget map of imported modulesr   )defaultdictitems	iteritemsN)
collectionsr   listPY3rG   sysmodules__dict__r   append)r   modmapr   namemoduleobjnamerO   r   r   r   _module_map   s   r   c                 C   s0   | | D ]\}}||u r||j kr|  S qdS )z!lookup name if module is importedN)rf   )r   r   rO   main_modulemodobjmodnamer   r   r   _lookup_module,  s
   r   c           
      C   s   t  }g }i }trdnd}t| j| D ]\}}t|||| }|r)|||f q|||< qt|rGdd l}|| j	}	|	j
| ||	_|	S |S )Nr   r   r   )r   r   rG   r   r   r   lentypesr+   rf   r   __dill_imported)
r   r   importedoriginalr   r   rO   source_moduler   newmodr   r   r   _stash_modules2  s    
r   c                 C   s@   d| j vrd S | j d}|D ]\}}td||f | j  qd S )Nr   zfrom %s import %s)r   rp   exec)r   importsr   r   r   r   r   _restore_modulesF  s   
r   /tmp/session.pklc                 K   s   ddl m } |d }|du rt}t| dr| }nt| d}z+|r$t|}t||fi |}||_d|_d|_d|_	|
| W || urG|  dS || urR|  w w )	z.pickle the current state of __main__ to a filer   r   r   Nwriter~   FT)r   _main_modulehasattrro   r   r   _main_byref_recurse_sessionr   rt   )filenamemainr   r   r   r   rw   picklerr   r   r   r   N  s*   


r   c                 K   s   |du rt }t| dr| }nt| d}z+t|fi |}||_d|_| }d|_|j|j t	| W || ur=|
  dS || urH|
  w w )z?update the __main__ module with the state from the session fileNreadrz   TF)r   r   ro   r   r   r   r   r   r   r   rt   )r   r   r   rw   	unpicklerr   r   r   r   r   e  s$   



r   c                   @      e Zd ZdddZdd ZdS )MetaCatchingDictNc                 C   s"   z| | W S  t y   | Y S w rZ   )KeyError)selfkeydefaultr   r   r   get|  s
   
zMetaCatchingDict.getc                 C   s   t |trtS t rZ   )
issubclassrF   	save_typer   )r   r   r   r   r   __missing__  s   
zMetaCatchingDict.__missing__rZ   )rf   rg   rh   r   r   r   r   r   r   r   {  s    
r   c                   @   sH   e Zd ZdZeej ZdZddl	m	Z	 dd Z
dd Zejje_d	S )
r   z1python's Pickler extended to interpreter sessionsFr   r   c                 O   s   t j}|dd }|dd }|dd }tj| g|R i | t| _i | _|d u r/|d n|| _d| _	|d u r=|d n|| _
|d u rK|d | _d S || _d S )Nr   r   r   F)r   r   rp   StockPickler__init__r   r   _diff_cacher   	_strictio_fmoder   )r   ru   r   r   r   r   r   r   r   r   r     s    zPickler.__init__c                 C   s   t   trt|rtt|dd }tr$t|r$tt|dd }tr4t|t	kr4dt	 }t
|t| | t   d S )Nc                 S   s(   t d|  t| | t d d S )NzNu: %s# Nu)r   infor   save_globalr   rO   r   r   r   save_numpy_ufunc  s   
z&Pickler.dump.<locals>.save_numpy_ufuncc                 S   sV   t d|j|jf  t|dd }| \}}}| jt||||f|d t d d S )NzNu: (%s, %s)r   rV   r   )r   r   shapedtyperG   rN   save_reduce_create_array)r   rO   npdictrw   ru   stater   r   r   save_numpy_array  s   
z&Pickler.dump.<locals>.save_numpy_arrayz;Can't pickle %s: attribute lookup builtins.generator failed)stackclearr@   rS   r	   rF   rA   rR   GENERATOR_FAILr(   r   r   r   )r   rO   r   r   msgr   r   r   r     s   



zPickler.dumpN)rf   rg   rh   __doc__r   r   dispatchr
   r   r   r   r   r   r   r   r   r     s    
"r   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rd}t| ||S )N)rq   __main__)rq   NoneTypez	dill.dillz
dill._dill)r   r   rF   StockUnpickler
find_class)r   r   r   r   r   r   r     s   zUnpickler.find_classc                 O   sP   t j}|dd }tj| g|R i | t| _|d u r#|d | _d S || _d S )Nr   )r   r   rp   r   r   r   r   _ignore)r   ru   r   r   r   r   r   r   r     s
    zUnpickler.__init__c              	   C   s^   t | }t|jttddkr-| js-zt| jt|j|_	W |S  t
tfy,   Y |S w |S )Nrf   r   )r   r   rF   rg   rG   r   r   r   rf   rC   AttributeErrorrK   )r   rO   r   r   r   r     s   
zUnpickler.loadN)
rf   rg   rh   r   r   r   r   r   r   r   r   r   r   r   r     s    
	r   c                 C   s   |t j| < dS )z1expose dispatch table for user-created extensionsNr   r   rx   funcr   r   r   r     s   
r   c                    s    fdd}|S )Nc                    s   | t j < | S rZ   r   )r   rx   r   r   proxy  s   
zregister.<locals>.proxyr   )rx   r   r   r   r   r	     s   r	   c                  C   sD   t tj D ]\} }|jtkrtj| = | tv rt|  tj| < qd S rZ   )r   r   r   r   rg   rf   pickle_dispatch_copy)rF   r   r   r   r   _revert_extension  s   
r   c                 C   sB   | a t rtdu rzddlm} W n   ddl}Y |adS dS 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 unpicklable objects.
    MUST be called at start of script, otherwise changes will not be recorded.
    Nr   )diffr   )	_use_diffr    )ondr   r   r   use_diff  s   
r   c                  c   s~    dd l } trtttj t| j   }d}n| j }d}|D ]\}}t|dd |kr<t	|t	u r<||fV  q%d S )Nr   builtinsrq   rg   )
r   r   r   r   rq   r   r   r   rG   rF   )r   r   builtinr   valuer   r   r   _create_typemap  s"   

r   )CellTypeMethodWrapperTypePartialType	SuperTypeItemGetterTypeAttrGetterTypeFileTypeBufferedRandomTypeBufferedReaderTypeBufferedWriterTypeTextWrapperTypePyBufferedRandomTypePyBufferedReaderTypePyBufferedWriterTypePyTextWrapperTypeExitTyper   r   WrapperDescriptorTypeMethodDescriptorTypeClassMethodDescriptorTyperc   c                 c       | ]	\}}||fV  qd S rZ   r   .0kvr   r   r   	<genexpr>9      r  c                 c   r  rZ   r   r  r   r   r   r  ;  r  c                 C   s
   t | S rZ   )marshalr   )stringr   r   r   
_unmarshal=     
r  c                 C   s   t |  S rZ   )_reverse_typemap)r   r   r   r   
_load_type@     r  c                 G   s   | | S rZ   r   )typeobjru   r   r   r   _create_typeC  r  r  c                 C   sB   |d u rt  }t| |pt  |||}|j| |d ur||_|S rZ   )r   r&   r   r   __kwdefaults__)fcodefglobalsfname	fdefaultsfclosurefdictfkwdefaultsr   r   r   r   _create_functionF  s   r%  c                 C   s.   |d u ri }|d u rd}| |g|R i |S )Nr   r   )ftypeobjr   ru   r   r   r   r   _create_ftypeQ  s
   r'  c                 G   s,   ddl m} | }| r|dstd|S )Nr   )LockFCannot acquire lock)	threadingr(  acquirer   )lockedru   r(  lockr   r   r   _create_lockX  s   
r.  c                 G   s4   t  }|d ur|| |f |r| std|S )Nr)  )	RLockType_acquire_restore	_is_ownedr   )countownerru   r-  r   r   r   _create_rlock`  s   r4  c              	   C   s  t jt jt jd}| t| v r||  }	n+| dkr!t }	n!| dkr0dd l}
|
	|}	nd|v r?t j
dk r?td| ztj| }W n   d}Y |se|rXtd	|  d
|v rb|tkrbd} d}ntj| }||kr{|rutd|tkr{|}z|tkr|| d|v r|nd}	|	| d|vr|	  || |}	n| dkrdd l}
|
	|}	n|tkr'd|v sd|v r'tj}d|v r|tjO }n|tjO }tt| ||}	trt|	d|	}t|d|}| |_n6tstdG dd dtj}G dd dtj}| t t!|	t"|j#_t t!| t"|j# j$d7  _$|	j| ks&J n|| |}	W n t%tfyA   t & d }t'|w |rK|	  |	S |dkrZ|t(krZ|	)| |	S )N)z<stdin>z<stdout>z<stderr>z	<tmpfile>z<fdopen>r   r^   r    zinvalid mode: '%s'Fz)[Errno 2] No such file or directory: '%s'r|   zinvalid buffer sizew+bufferrawzNo module named 'ctypes'c                   @   s0   e Zd ZdejfdejfdejfdejfgZdS )z _create_filehandle.<locals>.FILErefcounttype_objfile_pointerr   N)rf   rg   rh   ctypesc_long	py_objectc_voidp_fields_r   r   r   r   FILE  s    rA  c                   @   s    e Zd ZdejfdejfgZdS )z$_create_filehandle.<locals>.PyObject	ob_refcntob_typeN)rf   rg   rh   r<  c_intr>  r@  r   r   r   r   PyObject  s    rE  r   )*r   	__stdin__
__stdout__
__stderr__r   keysrr   tmpfiletempfileTemporaryFile
hexversion
ValueErrorpathexistsFileNotFoundErrorr   getsizer   r   rt   O_CREATO_RDWRO_WRONLYfdopenro   r   rG   r   
HAS_CTYPESImportErrorr<  	StructurecastrL   POINTERcontentsrB  IOErrorexc_infor   r   seek)r   modepositionclosedro   strictior   fdatanamesrw   rK  rP  current_sizeflagsr|   rA  rE  errr   r   r   _create_filehandlei  s   



"

ri  c                 C   s&   t | }|r|  |S || |S rZ   )r   rt   r_  r   ra  rb  rw   r   r   r   _create_stringi  s
   
rk  c                 C   s.   t  }|r|  |S ||  || |S rZ   )r   rt   r   r_  rj  r   r   r   _create_stringo  s   

rl  c                   @   s   e Zd Zdd Zdd ZdS )_itemgetter_helperc                 C   s
   g | _ d S rZ   )r   )r   r   r   r   r     r  z_itemgetter_helper.__init__c                 C   s   | j | d S rZ   )r   r   )r   itemr   r   r   __getitem__  s   z_itemgetter_helper.__getitem__N)rf   rg   rh   r   ro  r   r   r   r   rm    s    rm  c                   @   r   )_attrgetter_helperNc                 C   s   || _ || _d S rZ   )attrsindex)r   rq  rr  r   r   r   r     s   
z_attrgetter_helper.__init__c                 C   sX   t | d}t | d}|d u rt|}|| nd|| |g||< t| ||S )Nrq  rr  .)object__getattribute__r   r   joinrF   )r   attrrq  rr  r   r   r   ru    s   z#_attrgetter_helper.__getattribute__rZ   )rf   rg   rh   r   ru  r   r   r   r   rp    s    
rp  c                        fddj d S )Nc                    rY   rZ   r   r[   r\  r   r   r_     rW   _create_cell.<locals>.<lambda>r   )__closure__ry  r   ry  r   _create_cell     r|  c                    rx  )Nc                    rY   rZ   r   r[   ry  r   r   r_     rW   rz  r   )func_closurery  r   ry  r   r|    r}  c                 G   sT   ddl m} | d u r"trddlm} nddlm} || g|R  S || g|R  S )Nr   )refUserDict)weakrefr  r   r   r  )rO   ru   r  r  r   r   r   _create_weakref  s   r  c                 G   sl   ddl m} | d u r.|r|dd g|R  S trddlm} nddlm} || g|R  S || g|R  S )Nr   )r   c                 S   s   | S rZ   r   r]   r   r   r   r_     rW   z#_create_weakproxy.<locals>.<lambda>r  )r  r   r   r   r  )rO   callableru   r   r  r   r   r   _create_weakproxy  s   r  c                 C   s   t | S rZ   )eval)repr_strr   r   r   
_eval_repr  r  r  c                 C   s*   | | }| | |d ur|j| |S rZ   )__setstate__r   r   )rw   ru   r   r   arrayr   r   r   r     s
   
r   c                 C   s>   t |d |  dd}|d ur|S dd l}|| |}||_|S )Nrs  Tsafer   )_import_moduler   
namedtuplerg   )r   
fieldnames
modulenameclass_r   rx   r   r   r   _create_namedtuple  s   r  c              	   C   s   z| dd }t|d | d W S    z| j}t|tu r%|| }n
t| |}W | Y S W | Y S    t| |}Y | Y S )N'   z.__dict__["z"])splitr  r   rF   r/   rG   )objclassr   r  rw  r   r   r   _getattr  s   
r  c                 C   s   t | |d p
t t|S rZ   )rG   rq   )r   r   r   r   r   	_get_attr(  s   r  c                 C   s0   |   }|dd  |dd  |dd  |S )Nr   __weakref__rj   )r
   rp   )	dictproxy_dictr   r   r   _dict_from_dictproxy,  s
   r  c              	   C   sp   z(d| v r|  d}d|d d }|d }nt| W S tt|d d |g|W S  ttfy7   |r6Y d S  w )Nrs  r}   )r  rv  
__import__rG   rX  r   )import_namer  r   r   rO   r   r   r   r  3  s   


r  c                 C   s.   | j dv rdS t| j d | j dd}|| u S )N)r   NFrs  Tr  )rg   r  rf   )rO   sessionfoundr   r   r   _locate_functionA  s   
r  c                 C   s   t d|  trRt|dr1|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}n|j|j|j|j	|j
|j|j|j|j|j|j|j|j|jf}| jt||d t d d S )NzCo: %sco_posonlyargcountrV   z# Co)r   r   r   r   co_argcountr  co_kwonlyargcount
co_nlocalsco_stacksizeco_flagsco_code	co_constsco_namesco_varnamesco_filenameco_nameco_firstlineno	co_lnotabco_freevarsco_cellvarsr   r%   )r   rO   ru   r   r   r   	save_codeR  s0   

	
r  c                 C   s  t | r3|| jjkr3| js3tdt|jdd   t	r'| 
tdd n| 
d td d S t | sb|tjkrbtdt|jdd   t	rV| 
tdd n| 
d td	 d S d
|v r|tjkrt|d
 tu r|tt|d
 ddd u rtdt|jdd   t	r| 
td|d
  d n	| 
d|d
   td d S tdt|jdd   t | r| jrd| _t| | td d S )NzD1: <dict%sr   r}   zc__builtin__
__main__
UTF-8z# D1zD3: <dict%szc__main__
__dict__
z# D3rf   Tr   zD4: <dict%szc%s
__dict__
z# D4zD2: <dict%sFz# D2)is_dillr   r   r   r   r   rH   rn   r  r   r   bytesr   rF   rG   r  r   	save_dictr   r   r   r   save_module_dictr  s:   





r  c                 C   sj   |j dkr!td|  | jt|j|j|jf|d td d S td|  t	| | td d S )Nr   zC1: %srV   z# C1zC2: %sz# C2)
rg   r   r   r   r.   rf   	__bases__r   r   r   r   r   r   r   save_classobj  s   


r  c                 C   2   t d|  | jt| f|d t d d S )NzLo: %srV   z# Lo)r   r   r   r.  r,  r   r   r   r   	save_lock     
r  c                 C   s   t d|  | }t|dd  d d}tr*t|dd  d nt|d}| jt	||f|d t d	 d S )
NzRL: %szcount=r   r   >zowner=_RLock__ownerrV   z# RL)
r   r   rn   rI   r  rstripr   rG   r   r4  )r   rO   r|   r2  r3  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   r   r   r   r   r   save_socket  s   
r  c                 C   sD   t d|  t }|| | jt|t|j|d t d d S )NzIg: %srV   z# Ig)r   r   rm  r   rF   tupler   )r   rO   helperr   r   r   save_itemgetter  s   
r  c                 C   sH   t d|  g }t|}|| | jt|t||d t d d S )NzAg: %srV   z# Ag)r   r   rp  r   rF   r  )r   rO   rq  r  r   r   r   save_attrgetter  s   
r  c              
   C   s   |j rd}n|  |tjtjtjfv rd}n| }t| r3| jt	kr3||j
d}| }|  nd}t| r@| j}| j}nd}d}| jt|j
|j||j ||||f|d d S )Nr   r}   r|   r   FrV   )rb  flushr   rG  rH  rF  tellr  r   r   r   r   rt   r   r   ri  r`  )r   rO   open_ra  rw   rd  rc  r   r   r   r   
_save_file  s.   
r  c                 C   (   t d|  t| |t}t d |S NzFi: %sz# Fi)r   r   r  ro   r   rO   rw   r   r   r   	save_file  s   
r  c                 C   r  r  )r   r   r  _openr  r   r   r   r    s   
c                 C   T   t d|  |jrd}d}n| }| }| jt|||jf|d t d d S NzIo: %sr   r   rV   z# Io)r   r   rb  r   r  r   rk  r   rO   r   ra  r   r   r   save_stringi     


r  c                 C   r  r  )r   r   rb  r   r  r   rl  r  r   r   r   save_stringo  r  r  c                 C   s>   t d|  | jtt||j|j|jf|d t d d S )NzFu: %srV   z# Fu)r   r   r   r'  rF   r   ru   keywordsr   r   r   r   save_functor  s   
r  c                 C   4   t d|  | jt|j|jf|d t d d S )NzSu: %srV   z# Su)r   r   r   super__thisclass____self__r   r   r   r   
save_super%     
r  c                 C   s   |j d urO|j tu rtrdnd}d}td||f  n|j }d}td||f  t| r4| j}d| _| jt||j	f|d t| rF|| _td|  d S td	|  t
| | td
 d S )Nr   rq   B1%s: %sB3FrV   # %szB2: %sz# B2)r  rq   r   r   r   r  r   r   r  rf   r   r   )r   rO   r   _tr   r   r   r   save_builtin_method,  s(   


r  c                 C   sV   t d|  tr| jt|j|jf|d n| jt|j|j|j	f|d t d d S )NzMe: %srV   z# Me)
r   r   r   r   r'   __func__r  im_funcim_selfim_classr   r   r   r   save_instancemethod0D  s   
r  c                 C   :   t d|  | jt|j|j| f|d t d d S NzWr: %srV   z# Wrr   r   r   r  __objclass__rf   rn   r   r   r   r   save_wrapper_descriptorQ  s   
r  c                 C   r  r  r  r   r   r   r   r  ]     
c                 C   r  )NzMw: %srV   z# Mw)r   r   r   rG   r  rf   r   r   r   r   save_instancemethodf  r  r  c                 C   r  r  r  r   r   r   r   r  n  r  c                 C   s4   t d|  |j}| jt|f|d t d d S )NzCe: %srV   z# Ce)r   r   cell_contentsr   r|  r  r   r   r   	save_cellw  s
   
r  c                 C   r  )NzMp: %srV   z# Mp)r   r   r   r/   r
   r   r   r   r   save_dictproxy  r  r  c                 C   sp   t d|  |d}t|tkr2|jdkr2t|jdd |kr2| jt|jdf|d t d d S t	d| )NzDp: %sr   rV   z# Dpz&%s does not reference a class __dict__)
r   r   r   rF   rb   rf   rG   r  r   rJ   )r   rO   rw  r   r   r   r    s   

c                 C   s8   t d|  | jt|j|j|jf|d t d d S )NzSl: %srV   z# Sl)r   r   r   slicestartstopstepr   r   r   r   
save_slice  s   
r  c                 C   r  )NzSi: %srV   z# Si)r   r   r   r  rn   r   r   r   r   save_singleton  s   
r  c                 C   s   t | }zt| }W n ty   td Y S w ||kr t| S zt|ddd dd}W |S  tyn   tsKt|ddd dd}Y |S t	t
 }|D ]}t ||krct|   Y S qSdt|  }t|w )z.get memory address of proxy's reference objectNr  z at r}      rl   z)Cannot reference object for proxy at '%s')reprrH   rJ   rL   rI   r  r  rN  IS_PYPYitergcget_objects)rO   _repr_straddressobjects_objr   r   r   r   _proxy_helper  s&   r  c                 C   s   g d}|D ]}| t |kr|  S q|r%trt|j }n|j }ntt }|D ]}| t |kr9|  S q-zt| } W n t	yO   t	dt
|  w td|  )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')rL   r   r  r   values
itervaluesr  r  hexrK   rH   rJ   )r   r   specialrO   r  r   r   r   _locate_object  s   r  c                 C   s4   | }t d|  | jt|f|d t d d S )NzR1: %srV   z# R1)r   r   r   r  )r   rO   refobjr   r   r   save_weakref  s
   
r
  c              	   C   s   t t|}zd}td||f  W n ty+   d}td|t d f  Y nw t|tu r5d}nd}| j	t
||f|d td|  d S )	NR2r  R3r   TFrV   r  )r  r  r   r   rJ   r   r^  rF   r8   r   r  )r   rO   r	  r  r  r   r   r   save_weakproxy  s   r  c                    s   	 t
drg d}tfdd|D }|pdjv }nd}j dvr&|r/t| rZ| ju rZtd  j   fddtddg D  | jt	j f d td d S td	  | jt	j fd
 td d S )NFr   )seenr   zM1: %s with diffzDiff: %s)rO   r   z# M1zM2: %srV   z# M2__file__)base_prefixbase_exec_prefixexec_prefixprefixreal_prefixc              	      s0   g | ]}t t|r jtjtt|qS r   )r   r   r  
startswithrr   rO  normpathrG   )r  r   rV   r   r   
<listcomp>  s    
 zsave_module.<locals>.<listcomp>zsite-packagesT)r   r   zM1: %sc                    s   g | ]}  |d qS rZ   )rp   )r  rn  )
_main_dictr   r   r    s    __builtins__
__loader__)rf   r   whats_changedr   RuntimeErrorr   r   rI  r   r  r   anyr  r  r   r   r
   singletontypes)r   rO   changedre  builtin_modr   )r  rO   r   save_module  s8   





r!  c                    s   t v rtd   | jtt   f d td d S t trMt fdddD rMtd   | jtt	 d j
 j jf d td	 d S  jd
krtt trt| rq| jsqd}td| f  t j}n"td   t|   td d S d}td| f   j}|dg D ]}||= q| jtt  j
 j|f d td|  d S  td u rtd   tr| tdd n| d td d S td   t|   td d S )NzT1: %srV   z# T1c                    s   g | ]}t  |qS r   )r   )r  rw  rV   r   r   r    s    zsave_type.<locals>.<listcomp>)_fields_asdict_make_replacezT6: %srh   z# T6r   T2r  zT5: %sz# T5T3ri   r  zT7: %szc__builtin__
NoneType
r  z# T7zT4: %sz# T4)_typemapr   r   r   r  r   r  allr  rG   rf   r"  rg   rF   r  r   r  r   r   r   r   r  r  r   r   r  )r   rO   r  r  r   r   rV   r   r     sV   
0 $





r   c                 C   s<   t d|  | jt|j|j|j|jf|d t d d S )NzPr: %srV   z# Pr)r   r   r   propertyfgetfsetfdelr   r   r   r   r   save_propertyP  s
   r.  c                 C   s   t d|  trdnd}zt||}W n ty-   |d t}t|tr+t||}Y nw | j	t
||f|d t d d S )NzCm: %sr  r  rV   z# Cm)r   r   r   rG   r   __get__rt  
isinstanceclassmethodr   rF   )r   rO   r  	orig_funcr   r   r   save_classmethodW  s   

r3  c           	   	   C   s  t |std|  t| ddr-ddlm} ||ddd}t|tv r,tr)|j	n|j
}ntr2|j	n|j
}t| dd }t| dd }t|tv oJ|d u}tt|ftt|< trd	t|jd
dv oc|d u}|rid| _|rnd| _t|dd }| jt|j||j|j|j|j|f|d n0d	t|jd
dv o|d uot| dd}|rd| _|rd| _| jt|j||j|j|j|jf|d |r|| _|r|| _tr|s|s|s|s|s|s|r|   td d S td|  t| | td d S )NzF1: %sr   Fr   )
globalvarsT)r   r   r   r  r  r   r  rV   z# F1zF2: %sz# F2)r  r   r   rG   detectr4  rL   r   r   __globals__func_globalsr   __code__r   r   r   r%  rf   __defaults__r{  r   	func_code	func_namefunc_defaultsr~  OLDER
clear_memor   r   )	r   rO   r4  globsr   r   _memo_superr$  r   r   r   save_functione  sX   


&




(

rB  c                 K   s   |rt f}nttttf}zFt| fi |}zt| |  k}W n ty.   || k}Y nw |r4W dS |sPt	|t	| k}|rC|W S t
t	|t
t	| kW S W dS  |y\   Y dS w )z'quick check if object pickles with dillTF)	ExceptionrK   AssertionErrorr   r   r
   boolr)  r   rF   r  )rO   exactr  r   
exceptionspikresultr   r   r   r     s$   

r   c           
      O   s   | dd}| dd}|du rddl}|j}t|t ddl}d}zt| g|R i |}d}W |r9|r9td n|rC|rDtd w w w d|t|f }	|	|	
dd	sXd
nd}	|r`t|	 dS )z2check pickling of an object across another processverboseFpythonNr   TzDUMP FAILEDz(%s -c import dill; print(dill.loads(%s))rk   SUCCESSzLOAD FAILED)rp   r   
executabler0  rH   
subprocessr   printr  callr  )
rO   ru   r   rJ  rK  r   rN  failr  r   r   r   r   r     s,   

r   c                 C   s0   |du st st| jdsd| jv S t| j v S )z#check the dill-ness of your picklerFrD   r   )PY34r   rC   rg   r   rD   )r   childr   r   r   r    s   
r  c                  C   sB   t j D ]\} }z|tj| < W n   td|   Y q	 qdS )z1extend pickle with all of dill's registered typeszskip: %sN)r   r   r   r   r   r   r   r   r   r   _extend  s   rT  )NNNNrZ   )r   NF)r   N)T)NNNNN)F)FF)r   __all__r   	getLoggerr   
addHandlerStreamHandlerr   r   r   rr   r   r   r   rM  r   r=  OLD33rR  r   rq   r   r!   r   r   r   _threadr"   r#   r/  r*  r$   r   r%   r&   r'   r(   r)   r*   r+   r,   
memoryviewr4   rF   r.   Ellipsisr3   NotImplementedr2   r  r1   r5   ranger0   rt  r   r/   r-   r   threadr   r   r   r   rX  r   r   r  r  r  r6   r7   r8   	functoolsr9   operatorr:   r;   r]  rQ  r   r<  rW  r   r  r@   rA   r   	importlib	machinery
PathFinder	find_specimpfind_modulerB   rR   rS   r{  r   r~  rb   rc   rd   re   r
  r  r  rn   r   rI   r   r  rC  rK   r   r   r   ry   r   r  r  r  r  _pyioro   r  r  r  r  r  	cStringIOr   r   r   ior   r   
SocketTypemultiprocessing.reductionr   r   __IPYTHON__r	  r  	NameErrorr   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r  r   r   r(  r   r  r  r  r%  r'  r.  r4  ri  rk  rl  rm  rp  r|  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r!  r   r*  r.  staticmethodr1  r3  rB  r   r   r  rT  r   r   r   r   <module>   s  




(H






	



9 




	\



	



!


	

	








	




-
7


:

