a
    ze                     @   sD  d dl mZ d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlZd dlmZ d dlmZmZ d dlZd dlZd dlZd dlZg d	Zzd d
lmZ ed dZW n ey   dZY n0 eefZdZg dZdZdZ G dd de!Z"G dd de"Z#G dd de"Z$G dd de!Z%zd dl&m'Z' W n eyJ   dZ'Y n0 dZ(dZ)dZ*dZ+dZ,d Z-d!Z.d"Z/d#Z0d$Z1d%Z2d&Z3d'Z4d(Z5d)Z6d*Z7d+Z8d,Z9d-Z:d.Z;d/Z<d0Z=d1Z>d2Z?d3Z@d4ZAd5ZBd6ZCd7ZDd8ZEd9ZFd:ZGd;ZHd<ZId=ZJd>ZKd?ZLd@ZMdAZNdBZOdCZPdDZQdEZRdFZSdGZTdHZUdIZVdJZWdKZXdLZYdMZZdNZ[dOZ\dPZ]dQZ^eNeXeYeZgZ_dRZ`dSZadTZbdUZcdVZddWZedXZfdYZgdZZhd[Zid\Zjd]Zkd^Zld_Zmd`Zneodadb ep D  G dcdd ddZqG dedf dfZrdgdh Zsdidj Ztdkdl Zudmdn ZvG dodp dpZwG dqdr drZxddddsdtduZyddddsdvdwZzddxdyddzd{d|Z{ddxdyddzd}d~Z|z0d d	lm"Z"m#Z#m$Z$m}Z}m~Z~mZmZmZmZ W n2 ey   ewex Z}Z~eyeze{e|f\ZZZZY n0 dd Zedkr@d dlZejddZejdedddd ejddddd ejdddd e Zejre  n:ejse  n(d dlZejD ]ZeeZee q&dS )    )FunctionType)dispatch_table)_extension_registry_inverted_registry_extension_cache)islice)partialN)maxsize)packunpack)	PickleErrorPicklingErrorUnpicklingErrorPickler	Unpicklerdumpdumpsloadloads)PickleBufferr   TF4.0)z1.0z1.1z1.2z1.3z2.0z3.0r   z5.0      c                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r   r   /usr/lib/python3.9/pickle.pyr   I   s   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   M   s   r   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   T   s   	r   c                   @   s   e Zd Zdd ZdS )_Stopc                 C   s
   || _ d S N)valueselfr!   r   r   r   __init__b   s    z_Stop.__init__N)r   r   r   r$   r   r   r   r   r   a   s   r   )PyStringMap   (   .   0   1   2   F   I   J   K   L   M   N   P   Q   R   S   T   U   V   X   a   b   c   d   }   e   g   h   i   j   l   ]   o   p   q   r   s   t   )   u   Gs   I01
s   I00
                                       B   C                                       c                 C   s   g | ]}t d |r|qS )z[A-Z][A-Z0-9_]+$)rematch).0xr   r   r   
<listcomp>       rn   c                   @   sF   e Zd ZdZdZdd Zdd Zdd Zdd
dZdd Z	dd Z
dS )_Framerr   i   c                 C   s   || _ d | _d S r    )
file_writecurrent_frame)r#   rq   r   r   r   r$      s    z_Framer.__init__c                 C   s   t  | _d S r    )ioBytesIOrr   r#   r   r   r   start_framing   s    z_Framer.start_framingc                 C   s*   | j r&| j  dkr&| jdd d | _ d S )Nr   Tforce)rr   tellcommit_frameru   r   r   r   end_framing   s    z_Framer.end_framingFc                 C   sf   | j rb| j }| | jks|rb| }| j}t|| jkrP|ttdt|  || t	
 | _ d S )N<Q)rr   ry   _FRAME_SIZE_TARGET	getbufferrq   len_FRAME_SIZE_MINFRAMEr
   rs   rt   )r#   rx   fdatawriter   r   r   rz      s    z_Framer.commit_framec                 C   s    | j r| j |S | |S d S r    )rr   r   rq   r#   r   r   r   r   r      s    z_Framer.writec                 C   s,   | j }| jr| jdd || || d S )NTrw   )rq   rr   rz   )r#   headerpayloadr   r   r   r   write_large_bytes   s
    z_Framer.write_large_bytesN)F)r   r   r   r   r}   r$   rv   r{   rz   r   r   r   r   r   r   rp      s   
rp   c                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )	_UnframerNc                 C   s   || _ || _d | _d S r    )	file_readfile_readlinerr   )r#   r   r   	file_tellr   r   r   r$   	  s    z_Unframer.__init__c                 C   s   | j rb| j |}|dkrJt|dkrJd | _ t|}| ||d d < |S |t|k r^td|S t|}| ||d d < |S d S Nr   $pickle exhausted before end of frame)rr   readintor   r   r   )r#   bufnr   r   r   r     s    z_Unframer.readintoc                 C   sT   | j rF| j |}|s.|dkr.d | _ | |S t||k rBtd|S | |S d S r   )rr   readr   r   r   r#   r   r   r   r   r   r     s    
z_Unframer.readc                 C   sF   | j r:| j  }|s"d | _ |  S |d dkr6td|S |  S d S )N
   r   )rr   readliner   r   r   r   r   r   r   ,  s    
z_Unframer.readlinec                 C   s2   | j r| j  dkrtdt| || _ d S )Nro   z4beginning of a new frame before end of current frame)rr   r   r   rs   rt   r   r#   
frame_sizer   r   r   
load_frame9  s
    z_Unframer.load_frame)N)r   r   r   r$   r   r   r   r   r   r   r   r   r     s
   
r   c              	   C   sh   | dD ]T}|dkr&td|| z| }t| |} W q
 ty\   td|| d Y q
0 q
| |fS )N.z<locals>z&Can't get local attribute {!r} on {!r}z Can't get attribute {!r} on {!r})splitAttributeErrorformatgetattr)objnamesubpathparentr   r   r   _getattributeB  s    
r   c              	   C   s   t | dd }|d ur|S tj  D ]V\}}|dks&|dks&|d u rHq&z t||d | u rf|W   S W q& tyz   Y q&0 q&dS )Nr   __main____mp_main__r   )r   sysmodulescopyitemsr   r   )r   r   module_namemoduler   r   r   whichmoduleO  s     r   c                 C   sh   | dkrdS |   d? d }| j|ddd}| dk rd|dkrd|d d	krd|d
 d@ dkrd|d d }|S )Nr   ro         littleT	byteordersignedr         )
bit_lengthto_bytes)rm   nbytesresultr   r   r   encode_longb  s    r   c                 C   s   t j| dddS )Nr   Tr   )int
from_bytes)r   r   r   r   decode_long  s    r   c                   @   s  e Zd Zd;dddddZdd Zdd	 Zd
d Zdd Zdd Zd<ddZ	dd Z
dd Zd=ddZi Zdd Zeeed< dd Zeee< dd Zeee< dd Zeee< d d! Zeee< d"d# Zeee< erd$d% Zeee< d&d' Zeee< d(d) Zeee < d*d+ Z!e!ee"< d,Z#d-d. Z$d/d0 Z%e%ee&< e'dur@e%ee'< d1d2 Z(d3d4 Z)e)ee*< d5d6 Z+e+ee,< d>d7d8Z-d9d: Z.e-ee/< e.ee< dS )?_PicklerNTfix_importsbuffer_callbackc                C   s   |d u rt }|dk rt}n"d|  kr.tks<n tdt |d urT|dk rTtd|| _z|j| _W n ty   tdY n0 t| j| _	| j	j| _| j	j
| _i | _t|| _|dk| _d| _|o|dk | _d S )Nr   zpickle protocol must be <= %dr   z#buffer_callback needs protocol >= 5z"file must have a 'write' attributer   r   )DEFAULT_PROTOCOLHIGHEST_PROTOCOL
ValueError_buffer_callbackr   _file_writer   	TypeErrorrp   framerr   _write_large_bytesmemor   protobinfastr   )r#   fileprotocolr   r   r   r   r   r$     s*    #



z_Pickler.__init__c                 C   s   | j   d S r    )r   clearru   r   r   r   
clear_memo  s    z_Pickler.clear_memoc                 C   sr   t | dstd| jjf | jdkr<| ttd| j  | jdkrP| j	  | 
| | t | j  d S )Nr   z2Pickler.__init__() was not called by %s.__init__()   <Br   )hasattrr   	__class__r   r   r   PROTOr
   r   rv   saveSTOPr{   r#   r   r   r   r   r     s    





z_Pickler.dumpc                 C   s:   | j r
d S t| j}| | | ||f| jt|< d S r    )r   r   r   r   putid)r#   r   idxr   r   r   memoize  s
    
z_Pickler.memoizec                 C   sT   | j dkrtS | jr:|dk r*ttd| S ttd| S ntt|d d S d S )Nr      r   <Iascii   
)	r   MEMOIZEr   BINPUTr
   LONG_BINPUTPUTreprencode)r#   r   r   r   r   r     s    
z_Pickler.putc                 C   s@   | j r*|dk rttd| S ttd| S tt|d d S )Nr   r   r   r   r   )r   BINGETr
   LONG_BINGETGETr   r   r#   ir   r   r   get  s
    z_Pickler.getc           
      C   s  | j   | |}|d ur.|r.| | d S | jt|}|d ur^| | |d  d S t}t	| dd }|d ur~||}|tu r@t
|}| j|}|d ur|| | d S t	| dt|}|d ur||}njt|t
r| | d S t	|dd }|d ur|| j}n0t	|dd }|d ur.| }ntd|j|f t|tr\| || d S t|tsttd| t|}	d|	  krd	ksn td
| | j|d|i d S )Nr   reducer_overrider   __reduce_ex__
__reduce__zCan't pickle %r object: %rz%s must return string or tupler      z2Tuple returned by %s must have two to six elementsr   )r   rz   persistent_id	save_persr   r   r   r   NotImplementedr   typedispatchr   
issubclasssave_globalr   r   r   
isinstancestrtupler   save_reduce)
r#   r   save_persistent_idpidrm   rvreducetr   lr   r   r   r     sZ    









z_Pickler.savec                 C   s   d S r    r   r   r   r   r   r   ]  s    z_Pickler.persistent_idc                 C   s`   | j r | j|dd | t n<z | tt|d d  W n tyZ   tdY n0 d S )NF)r   r   r   2persistent IDs in protocol 0 must be ASCII strings)	r   r   r   	BINPERSIDPERSIDr   r   UnicodeEncodeErrorr   r#   r   r   r   r   r   a  s     z_Pickler.save_persc                 C   sD  t |tstdt|s"td| j}| j}	t|dd}
| jdkr|
dkr|\}}}t|dsntd	|
|d ur||j
urtd		|
| jd
kr|| || || |	t n2t|j|g|R i |}|| |d |	t n| jdkrd|
dkrd|d }t|ds td|d ur>||j
ur>td|dd  }|| || |	t n|| || |	t |d urt|| jv r|	t| | jt| d   n
| | |d ur| | |d ur| | |d ur@|d u r|| |	t n0|| || || |	t |	t |	t d S )Nz'args from save_reduce() must be a tuplez(func from save_reduce() must be callabler    r   __newobj_ex____new__z#args[0] from {} args has no __new__z(args[0] from {} args has the wrong classr   r   
__newobj__r   z+args[0] from __newobj__ args has no __new__z0args[0] from __newobj__ args has the wrong classr   )r   r   r   callabler   r   r   r   r   r   r   	NEWOBJ_EXr   r
  REDUCENEWOBJr   r   POPr   r   _batch_appends_batch_setitemsBUILDTUPLE2)r#   funcargsstate	listitems	dictitemsstate_setterr   r   r   	func_nameclskwargsr   r   r   r   m  sz    







"







z_Pickler.save_reducec                 C   s   |  t d S r    )r   NONEr   r   r   r   	save_none  s    z_Pickler.save_nonec                 C   s4   | j dkr| |rtnt n| |r*tnt d S )Nr   )r   r   NEWTRUENEWFALSETRUEFALSEr   r   r   r   	save_bool  s    
z_Pickler.save_boolc                 C   s.  | j r~|dkrN|dkr.| ttd|  d S |dkrN| ttd|  d S d|  krbdkr~n n| ttd|  d S | jd	krt|}t|}|d
k r| t	td| |  n| t
td| |  d S d|  krdkrn n| tt|d d  n| tt|d d  d S )Nr   r   r     <Hi   i<ir   r   r   r   s   L
)r   r   BININT1r
   BININT2BININTr   r   r   LONG1LONG4INTr   r   LONGr#   r   encodedr   r   r   r   	save_long  s*    
z_Pickler.save_longc                 C   s<   | j r| ttd|  n| tt|d d  d S )N>dr   r   )r   r   BINFLOATr
   FLOATr   r   r   r   r   r   
save_float  s    z_Pickler.save_floatc                 C   s   | j dk r@|s | jtd|d n| jtjt|ddf|d d S t|}|dkrj| tt	d| |  nf|dkr| j dkr| 
tt	d	| | n<|| jjkr| 
tt	d
| | n| tt	d
| |  | | d S )Nr   r   r   latin1r   r       r   r|   r   )r   r   bytescodecsr   r   r   r   SHORT_BINBYTESr
   r   	BINBYTES8r   r}   BINBYTESr   r#   r   r   r   r   r   
save_bytes  s     
z_Pickler.save_bytesc                 C   s   | j dk r:|s | jtd|d n| jtt|f|d d S t|}|| jjkrf| tt	d| | n| 
tt	d| |  d S )Nr   r   r6  r|   )r   r   	bytearrayr9  r   r   r}   r   
BYTEARRAY8r
   r   r>  r   r   r   save_bytearray)  s    
z_Pickler.save_bytearrayc                 C   s   | j dk rtd| ~}|js*tdd}| jd urFt| |}|rp|jr`| |  q| 	|  n| 
t |jr| 
t W d    n1 s0    Y  d S )Nr   z0PickleBuffer can only pickled with protocol >= 5zHPickleBuffer can not be pickled when pointing to a non-contiguous bufferT)r   r   raw
contiguousr   boolreadonlyr?  tobytesrB  r   NEXT_BUFFERREADONLY_BUFFER)r#   r   min_bandr   r   r   save_picklebuffer8  s    



z_Pickler.save_picklebufferc                 C   s  | j r|dd}t|}|dkrF| jdkrF| ttd| |  nf|dkrp| jdkrp| ttd| | n<|| j	j
kr| ttd| | n| ttd| |  nT|d	d
}|dd}|dd}|dd}|dd}| t|d d  | | d S )Nutf-8surrogatepassr   r   r   r8  r|   r   \z\u005c z\u0000
z\u000az\u000dz\u001araw-unicode-escaper   )r   r   r   r   r   SHORT_BINUNICODEr
   r   BINUNICODE8r   r}   
BINUNICODEreplaceUNICODEr   r/  r   r   r   save_strR  s&    z_Pickler.save_strc                 C   s:  |s(| j r| t n| tt  d S t|}| j}| j}|dkr| jdkr|D ]}|| qRt	||v r| 
|t	| d }| t| |  n| t|  | | d S | j}|t |D ]}|| qt	||v r$| 
|t	| d }| j r|t|  n|t|d  |  d S |t | | d S )Nr   r   r   r   )r   r   EMPTY_TUPLEMARKTUPLEr   r   r   r   r   r   r  _tuplesize2coder   POP_MARK)r#   r   r   r   r   elementr   r   r   r   r   
save_tuplei  s:    


z_Pickler.save_tuplec                 C   s8   | j r| t n| tt  | | | | d S r    )r   r   
EMPTY_LISTr\  LISTr   r  r   r   r   r   	save_list  s
    
z_Pickler.save_listi  c                 C   s   | j }| j}| js0|D ]}|| |t qd S t|}tt|| j}t|}|dkr||t	 |D ]}|| qd|t
 n|r||d  |t || jk r8d S q8d S Nr   r   )r   r   r   APPENDiterlistr   
_BATCHSIZEr   r\  APPENDS)r#   r   r   r   rm   ittmpr   r   r   r   r    s(    



z_Pickler._batch_appendsc                 C   s<   | j r| t n| tt  | | | |  d S r    )r   r   
EMPTY_DICTr\  DICTr   r  r   r   r   r   r   	save_dict  s
    
z_Pickler.save_dictc           	      C   s   | j }| j}| js<|D ] \}}|| || |t qd S t|}tt|| j}t|}|dkr|t	 |D ]\}}|| || qp|t
 n(|r|d \}}|| || |t || jk rDd S qDd S re  )r   r   r   SETITEMrg  rh  r   ri  r   r\  SETITEMS)	r#   r   r   r   kvrk  rl  r   r   r   r   r    s0    



z_Pickler._batch_setitemsc                 C   s   | j }| j}| jdk r0| jtt|f|d d S |t | | t|}tt	|| j
}t|}|dkr|t |D ]}|| qv|t || j
k rJd S qJd S Nr   r6  r   )r   r   r   r   setrh  	EMPTY_SETr   rg  r   ri  r   r\  ADDITEMS)r#   r   r   r   rk  batchr   itemr   r   r   save_set  s"    



z_Pickler.save_setc                 C   s   | j }| j}| jdk r0| jtt|f|d d S |t |D ]}|| q<t|| jv r||t	| 
| jt| d   d S |t | | d S rt  )r   r   r   r   	frozensetrh  r\  r   r   r_  r   	FROZENSETr   )r#   r   r   r   ry  r   r   r   save_frozenset  s    

 z_Pickler.save_frozensetc              
   C   sT  | j }| j}|d u r t|dd }|d u r.|j}t||}z(t|dd tj| }t||\}}W n, t	t
tfy   td|||f d Y n0 ||urtd|||f | jdkrt||f}	|	r|	dkr|ttd|	  n0|	d	kr|ttd
|	  n|ttd|	  d S |dd }
||u r4|
}| jdkr^| | | | |t n||urz| t||
f n| jdkr|tt|d d t|d d  n| jrtj}tj}||f|v r|||f \}}n||v r|| }z(|tt|d d t|d d  W n* tyD   td||| jf d Y n0 | | d S )Nr   r   levelz(Can't pickle %r: it's not found as %s.%sz2Can't pickle %r: it's not the same object as %s.%sr   r   r   r%  r&  r'  r   r   r   rM  r   r   z?can't pickle global identifier '%s.%s' using pickle protocol %i) r   r   r   r   r   
__import__r   r   r   ImportErrorKeyErrorr   r   r   r   r   EXT1r
   EXT2EXT4
rpartitionr   STACK_GLOBALr   GLOBALr9  r   _compat_pickleREVERSE_NAME_MAPPINGREVERSE_IMPORT_MAPPINGr  r   )r#   r   r   r   r   r   r   obj2r   codelastnamer_name_mappingr_import_mappingr   r   r   r     s    










z_Pickler.save_globalc                 C   s`   |t d u r| jt d|dS |t tu r:| jt tf|dS |t du rV| jt d|dS | |S )Nr    r6  .).)r   r   r   r   r   r   r   r   	save_typea  s    z_Pickler.save_type)N)T)NNNNN)N)0r   r   r   r$   r   r   r   r   r   r   r   r   r   r   r  r   r$  rE  r1  r   r5  floatr?  r9  rB  r@  _HAVE_PICKLE_BUFFERrL  r   rZ  r   ra  r   rd  rh  ri  r  ro  dictr%   r  rz  ru  r}  r{  r   r  r   r   r   r   r   r     sf   9
	
F  
u1		

B	r   c                   @   s  e Zd ZdddddddZdd	 Zd
d Zdd Zi Zdd Zeee	d < dd Z
e
eed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd  Zeeed < d!d" Zeeed < d#d$ Zeeed < d%d& Zeeed < d'd( Z e ee!d < d)d* Z"e"ee#d < d+d, Z$e$ee%d < d-d. Z&e&ee'd < d/d0 Z(d1d2 Z)e)ee*d < d3d4 Z+e+ee,d < d5d6 Z-e-ee.d < d7d8 Z/e/ee0d < d9d: Z1e1ee2d < d;d< Z3e3ee4d < d=d> Z5e5ee6d < d?d@ Z7e7ee8d < dAdB Z9e9ee:d < dCdD Z;e;ee<d < dEdF Z=e=ee>d < dGdH Z?e?ee@d < dIdJ ZAeAeeBd < dKdL ZCeCeeDd < dMdN ZEeEeeFd < dOdP ZGeGeeHd < dQdR ZIeIeeJd < dSdT ZKeKeeLd < dUdV ZMeMeeNd < dWdX ZOeOeePd < dYdZ ZQeQeeRd < d[d\ ZSeSeeTd < d]d^ ZUeUeeVd < d_d` ZWeWeeXd < dadb ZYdcdd ZZeZee[d < dedf Z\e\ee]d < dgdh Z^e^ee_d < didj Z`e`eead < dkdl Zbebeecd < dmdn Zdedeeed < dodp Zfefeegd < dqdr Zheheeid < dsdt Zjejeekd < dudv Zldwdx Zmdydz Zneneeod < d{d| Zpepeeqd < d}d~ Zrereesd < dd Zteteeud < dd Zveveewd < dd Zxexeeyd < dd Zzezee{d < dd Z|e|ee}d < dd Z~e~eed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dd Zeeed < dS )
_UnpicklerTASCIIstrictNr   encodingerrorsbuffersc                C   sH   |d urt |nd | _|j| _|j| _i | _|| _|| _d| _	|| _
d S Nr   )rg  _buffersr   _file_readliner   
_file_readr   r  r  r   r   )r#   r   r   r  r  r  r   r   r   r$   r  s    'z_Unpickler.__init__c              
   C   s   t | dstd| jjf t| j| j| _| jj| _| jj	| _	| jj
| _
g | _g | _| jj| _d| _| j}| j}z&|d}|st||d  |  qtW n* ty } z|jW  Y d }~S d }~0 0 d S )Nr  z4Unpickler.__init__() was not called by %s.__init__()r   r   )r   r   r   r   r   r  r  	_unframerr   r   r   	metastackstackappendr   r   EOFErrorr   r!   )r#   r   r   keystopinstr   r   r   r     s*    




z_Unpickler.loadc                 C   s    | j }| j | _ | j j| _|S r    )r  r  popr  r#   r   r   r   r   pop_mark  s    
z_Unpickler.pop_markc                 C   s   t dd S )Nz%unsupported persistent id encountered)r   r  r   r   r   persistent_load  s    z_Unpickler.persistent_loadc                 C   s:   |  dd }d|  kr"tks0n td| || _d S )Nr   r   zunsupported pickle protocol: %d)r   r   r   r   )r#   r   r   r   r   
load_proto  s    z_Unpickler.load_protor   c                 C   s8   t d| d\}|tjkr(td| | j| d S )Nr|      zframe size > sys.maxsize: %d)r   r   r   r	   r   r  r   r   r   r   r   r     s    
z_Unpickler.load_framec                 C   sJ   z|   d d d}W n ty4   tdY n0 | | | d S )Nr   r   r  )r   decodeUnicodeDecodeErrorr   r  r  r  r   r   r   load_persid  s    
z_Unpickler.load_persidc                 C   s   | j  }| | | d S r    )r  r  r  r  r  r   r   r   load_binpersid  s    
z_Unpickler.load_binpersidc                 C   s   |  d  d S r    r  ru   r   r   r   	load_none  s    z_Unpickler.load_nonec                 C   s   |  d d S )NFr  ru   r   r   r   
load_false  s    z_Unpickler.load_falsec                 C   s   |  d d S )NTr  ru   r   r   r   	load_true  s    z_Unpickler.load_truec                 C   sL   |   }|tdd  krd}n |tdd  kr4d}n
t|d}| | d S )Nr   FTr   )r   r#  r"  r   r  )r#   r   valr   r   r   load_int  s    
z_Unpickler.load_intc                 C   s   |  td| dd  d S )Nr'  r   r   r  r   r   ru   r   r   r   load_binint  s    z_Unpickler.load_binintc                 C   s   |  | dd  d S re  )r  r   ru   r   r   r   load_binint1  s    z_Unpickler.load_binint1c                 C   s   |  td| dd  d S )Nr&  r   r   r  ru   r   r   r   load_binint2  s    z_Unpickler.load_binint2c                 C   s@   |   d d }|r,|d dkr,|d d }| t|d d S )Nr   L   r   )r   r  r   )r#   r  r   r   r   	load_long  s    z_Unpickler.load_longc                 C   s*   |  dd }|  |}| t| d S re  )r   r  r   r   r   r   r   
load_long1  s    
z_Unpickler.load_long1c                 C   s>   t d| d\}|dk r"td| |}| t| d S )Nr'  r   r   z#LONG pickle has negative byte count)r   r   r   r  r   r   r   r   r   
load_long4  s
    
z_Unpickler.load_long4c                 C   s   |  t|  d d  d S Nr   )r  r  r   ru   r   r   r   
load_float!  s    z_Unpickler.load_floatc                 C   s   |  td| dd  d S )Nr2  r  r   r  ru   r   r   r   load_binfloat%  s    z_Unpickler.load_binfloatc                 C   s"   | j dkr|S || j | jS d S )Nr9  )r  r  r  r"   r   r   r   _decode_string)  s    
z_Unpickler._decode_stringc                 C   sl   |   d d }t|dkrF|d |d krF|d dv rF|dd }ntd| | t|d  d S )Nr   r   r   s   "'r   z)the STRING opcode argument must be quoted)r   r   r   r  r  r:  escape_decoder   r   r   r   load_string2  s
    (z_Unpickler.load_stringc                 C   s@   t d| d\}|dk r"td| |}| | | d S )Nr'  r   r   z(BINSTRING pickle has negative byte count)r   r   r   r  r  r#   r   r   r   r   r   load_binstring<  s
    
z_Unpickler.load_binstringc                 C   s:   t d| d\}|tkr&tdt | | | d S )Nr   r   z2BINBYTES exceeds system's maximum size of %d bytesr   r   r	   r   r  r#   r   r   r   r   load_binbytesE  s    z_Unpickler.load_binbytesc                 C   s    |  t|  d d d d S )Nr   rT  )r  r   r   ru   r   r   r   load_unicodeM  s    z_Unpickler.load_unicodec                 C   sB   t d| d\}|tkr&tdt | t| |dd d S )Nr   r   z4BINUNICODE exceeds system's maximum size of %d bytesrM  rN  r   r   r	   r   r  r   r  r   r   r   load_binunicodeQ  s    z_Unpickler.load_binunicodec                 C   sB   t d| d\}|tkr&tdt | t| |dd d S )Nr|   r  z5BINUNICODE8 exceeds system's maximum size of %d bytesrM  rN  r  r  r   r   r   load_binunicode8Y  s    z_Unpickler.load_binunicode8c                 C   s:   t d| d\}|tkr&tdt | | | d S )Nr|   r  z3BINBYTES8 exceeds system's maximum size of %d bytesr  r  r   r   r   load_binbytes8a  s    z_Unpickler.load_binbytes8c                 C   sF   t d| d\}|tkr&tdt t|}| | | | d S )Nr|   r  z4BYTEARRAY8 exceeds system's maximum size of %d bytes)r   r   r	   r   r@  r   r  )r#   r   br   r   r   load_bytearray8i  s    
z_Unpickler.load_bytearray8c                 C   sJ   | j d u rtdzt| j }W n ty:   tdY n0 | | d S )NzLpickle stream refers to out-of-band data but no *buffers* argument was givenznot enough out-of-band buffers)r  r   nextStopIterationr  )r#   r   r   r   r   load_next_buffers  s    
z_Unpickler.load_next_bufferc                 C   sJ   | j d }t|$}|js(| | j d< W d    n1 s<0    Y  d S r  )r  
memoryviewrF  
toreadonly)r#   r   rJ  r   r   r   load_readonly_buffer~  s    

z_Unpickler.load_readonly_bufferc                 C   s,   |  dd }|  |}| | | d S re  )r   r  r  r  r   r   r   load_short_binstring  s    
z_Unpickler.load_short_binstringc                 C   s"   |  dd }| |  | d S re  )r   r  r  r   r   r   load_short_binbytes  s    z_Unpickler.load_short_binbytesc                 C   s*   |  dd }| t|  |dd d S )Nr   r   rM  rN  )r   r  r   r  r   r   r   load_short_binunicode  s    z _Unpickler.load_short_binunicodec                 C   s   |   }| t| d S r    )r  r  r   r  r   r   r   
load_tuple  s    z_Unpickler.load_tuplec                 C   s   |  d d S )Nr   r  ru   r   r   r   load_empty_tuple  s    z_Unpickler.load_empty_tuplec                 C   s   | j d f| j d< d S r  r  ru   r   r   r   load_tuple1  s    z_Unpickler.load_tuple1c                 C   s$   | j d | j d fg| j dd < d S )Nr   r   r  ru   r   r   r   load_tuple2  s    z_Unpickler.load_tuple2c                 C   s,   | j d | j d | j d fg| j dd < d S )Nr   r   r  ru   r   r   r   load_tuple3  s    z_Unpickler.load_tuple3c                 C   s   |  g  d S r    r  ru   r   r   r   load_empty_list  s    z_Unpickler.load_empty_listc                 C   s   |  i  d S r    r  ru   r   r   r   load_empty_dictionary  s    z _Unpickler.load_empty_dictionaryc                 C   s   |  t  d S r    )r  ru  ru   r   r   r   load_empty_set  s    z_Unpickler.load_empty_setc                 C   s   |   }| t| d S r    )r  r  r{  r  r   r   r   load_frozenset  s    z_Unpickler.load_frozensetc                 C   s   |   }| | d S r    )r  r  r  r   r   r   	load_list  s    z_Unpickler.load_listc                    s4   |     fddtdt dD }| | d S )Nc                    s   i | ]} |  |d   qS )r   r   )rl   r   r   r   r   
<dictcomp>  s   z(_Unpickler.load_dict.<locals>.<dictcomp>r   r   )r  ranger   r  )r#   dr   r  r   	load_dict  s
    
z_Unpickler.load_dictc              
   C   s   |st |trt|drlz|| }W qv tyh } z,td|jt|f t d W Y d }~qvd }~0 0 n
||}| 	| d S )N__getinitargs__zin constructor for %s: %sr   )
r   r   r   r   r   r   r   exc_infor
  r  )r#   klassr  r!   errr   r   r   _instantiate  s    

z_Unpickler._instantiatec                 C   sL   |   d d d}|   d d d}| ||}| ||   d S )Nr   r   )r   r  
find_classr  r  r#   r   r   r  r   r   r   	load_inst  s    z_Unpickler.load_instc                 C   s"   |   }|d}| || d S r  )r  r  r  )r#   r  r  r   r   r   load_obj  s    
z_Unpickler.load_objc                 C   s4   | j  }| j  }|j|g|R  }| | d S r    r  r  r
  r  )r#   r  r  r   r   r   r   load_newobj  s    

z_Unpickler.load_newobjc                 C   sD   | j  }| j  }| j  }|j|g|R i |}| | d S r    r  )r#   r  r  r  r   r   r   r   load_newobj_ex  s
    


z_Unpickler.load_newobj_exc                 C   sF   |   d d d}|   d d d}| ||}| | d S )Nr   rM  )r   r  r  r  r  r   r   r   load_global  s    z_Unpickler.load_globalc                 C   sJ   | j  }| j  }t|tus,t|tur4td| | || d S )NzSTACK_GLOBAL requires str)r  r  r   r   r   r  r  )r#   r   r   r   r   r   load_stack_global  s
    

z_Unpickler.load_stack_globalc                 C   s   |  dd }| | d S re  )r   get_extensionr#   r  r   r   r   	load_ext1  s    z_Unpickler.load_ext1c                 C   s    t d| d\}| | d S )Nr&  r   r   r   r  r  r   r   r   	load_ext2	  s    z_Unpickler.load_ext2c                 C   s    t d| d\}| | d S )Nr'  r   r  r  r   r   r   	load_ext4  s    z_Unpickler.load_ext4c                 C   sp   g }t ||}||ur&| | d S t|}|sP|dkrDtdtd| | j| }|t |< | | d S )Nr   zEXT specifies code <= 0zunregistered extension code %d)r   r   r  r   r   r   r  )r#   r  nilr   r  r   r   r   r    s    


z_Unpickler.get_extensionc                 C   s   t d|| | jdk rT| jrT||ftjv r@tj||f \}}n|tjv rTtj| }t|dd | jdkr~tt j	| |d S t
t j	| |S d S )Nzpickle.find_classr   r   r~  r   )r   auditr   r   r  NAME_MAPPINGIMPORT_MAPPINGr  r   r   r   )r#   r   r   r   r   r   r  #  s    


z_Unpickler.find_classc                 C   s&   | j }| }|d }|| |d< d S r  r  r  )r#   r  r  r  r   r   r   load_reduce1  s    z_Unpickler.load_reducec                 C   s   | j r| j d= n|   d S r  )r  r  ru   r   r   r   load_pop8  s    
z_Unpickler.load_popc                 C   s   |    d S r    )r  ru   r   r   r   load_pop_mark?  s    z_Unpickler.load_pop_markc                 C   s   |  | jd  d S r  )r  r  ru   r   r   r   load_dupC  s    z_Unpickler.load_dupc                 C   sT   t |  d d }z| | j|  W n& tyN   d| }t|d Y n0 d S )Nr   Memo value not found at index )r   r   r  r   r  r   )r#   r   msgr   r   r   load_getG  s    
z_Unpickler.load_getc              
   C   s`   |  dd }z| | j|  W n8 tyZ } z d| }t|d W Y d }~n
d }~0 0 d S )Nr   r   r  )r   r  r   r  r   r#   r   excr	  r   r   r   load_bingetP  s    
z_Unpickler.load_bingetc              
   C   sd   t d| d\}z| | j|  W n8 ty^ } z d| }t|d W Y d }~n
d }~0 0 d S )Nr   r   r  )r   r   r  r   r  r   r  r   r   r   load_long_bingetY  s    
z_Unpickler.load_long_bingetc                 C   s8   t |  d d }|dk r$td| jd | j|< d S )Nr   r   znegative PUT argument)r   r   r   r  r   r   r   r   r   load_putb  s    z_Unpickler.load_putc                 C   s2   |  dd }|dk rtd| jd | j|< d S )Nr   r   znegative BINPUT argumentr   )r   r   r  r   r   r   r   r   load_binputi  s    z_Unpickler.load_binputc                 C   s6   t d| d\}|tkr"td| jd | j|< d S )Nr   r   znegative LONG_BINPUT argumentr   )r   r   r	   r   r  r   r   r   r   r   load_long_binputp  s    z_Unpickler.load_long_binputc                 C   s   | j }| jd |t|< d S r  )r   r  r   )r#   r   r   r   r   load_memoizew  s    z_Unpickler.load_memoizec                 C   s$   | j }| }|d }|| d S r  )r  r  r  )r#   r  r!   rh  r   r   r   load_append|  s    z_Unpickler.load_appendc                 C   sX   |   }| jd }z
|j}W n ty.   Y n0 || d S |j}|D ]}|| qFd S r  )r  r  extendr   r  )r#   r   list_objr  r  ry  r   r   r   load_appends  s    

z_Unpickler.load_appendsc                 C   s*   | j }| }| }|d }|||< d S r  r  )r#   r  r!   r  r  r   r   r   load_setitem  s
    z_Unpickler.load_setitemc                 C   s@   |   }| jd }tdt|dD ]}||d  ||| < q"d S )Nr   r   r   r   )r  r  r  r   )r#   r   r  r   r   r   r   load_setitems  s    
z_Unpickler.load_setitemsc                 C   sD   |   }| jd }t|tr(|| n|j}|D ]}|| q2d S r  )r  r  r   ru  updateadd)r#   r   set_objr  ry  r   r   r   load_additems  s    

z_Unpickler.load_additemsc           
      C   s   | j }| }|d }t|dd }|d ur6|| d S d }t|trXt|dkrX|\}}|r|j}tj}|	 D ]*\}}	t
|tu r|	|||< qp|	||< qp|r|	 D ]\}}	t|||	 qd S )Nr   __setstate__r   )r  r  r   r   r   r   __dict__r   internr   r   r   setattr)
r#   r  r  instsetstate	slotstate	inst_dictr  rr  rs  r   r   r   
load_build  s(    
z_Unpickler.load_buildc                 C   s"   | j | j g | _| jj| _d S r    )r  r  r  ru   r   r   r   	load_mark  s    z_Unpickler.load_markc                 C   s   | j  }t|d S r    )r  r  r   r"   r   r   r   	load_stop  s    
z_Unpickler.load_stop)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  r4  r  r3  r  r  STRINGr  	BINSTRINGr  r=  r  rY  r  rW  r  rV  r  r<  r  rA  r  rH  r  rI  r  SHORT_BINSTRINGr  r;  r  rU  r  r]  r  r[  r  TUPLE1r  r  r  TUPLE3r  rb  r  rm  r  rv  r  r|  r  rc  r  rn  r  r  INSTr  OBJr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r_  r  DUPr
  r   r  r   r  r   r  r   r  r   r  r   r  r   r  rf  r  rj  r  rp  r  rq  r  rw  r%  r  r&  r\  r'  r   r   r   r   r   r  p  s&  0				r  r   c                C   s   t ||||d|  d S Nr   )r   r   )r   r   r   r   r   r   r   r   _dump  s
    r1  c                C   s*   t  }t||||d|  | }|S r0  )rs   rt   r   r   getvalue)r   r   r   r   r   resr   r   r   _dumps  s    r4  r  r  r  c                C   s   t | ||||d S )Nr   r  r  r  )r  r   )r   r   r  r  r  r   r   r   _load  s    r6  c               C   s2   t | trtdt| }t|||||d S )Nz%Can't load pickle from unicode stringr5  )r   r   r   rs   rt   r  r   )sr   r  r  r  r   r   r   r   _loads  s    

r8  c                  C   s   dd l } |  S r  )doctesttestmod)r9  r   r   r   _test   s    r;  r   z$display contents of the pickle files)descriptionpickle_filebr*zthe pickle file)r   nargshelpz-tz--test
store_truezrun self-test suite)actionrA  z-vz)run verbosely; only affects self-test run)N)N)typesr   copyregr   r   r   r   	itertoolsr   	functoolsr   r   r	   structr
   r   rj   rs   r:  r  __all___pickler   r  r  r  r9  r@  bytes_typesformat_versioncompatible_formatsr   r   	Exceptionr   r   r   r   Zorg.python.corer%   r\  r   r  r_  r/  r4  r-  r*  r(  r.  r)  r  r  r  r  r(  r)  r*  rY  rW  rf  r  r  rn  rm  rj  r   r   r-  r   rc  rb  r.  r   r   r   rp  r]  r[  rq  r3  r"  r#  r   r  r  r  r  r+  r  r,  r   r!  r+  r,  r^  r=  r;  rU  rV  r<  rv  rw  r|  r  r  r   r   rA  rH  rI  r  dirrp   r   r   r   r   r   r   r  r1  r4  r6  r8  r   r   r   r   r   r   r;  r   argparseArgumentParserparseradd_argumentFileType
parse_argsr  testr=  
print_helpZpprintr   r   r   r   r   r   <module>   s@  


?;     ^    i	0




