????
Your IP : 3.21.34.214
o
��e���@sNdZddlmZddlmZddlmZmZmZddlm Z ddl
mZddlZddlm
Z
dd lmZmZddlZddlZddlZddlZgd
�ZzddlmZe�d�d
ZWneyddZYnweefZdZgd�ZdZ dZ!Gdd�de"�Z#Gdd�de#�Z$Gdd�de#�Z%Gdd�de"�Z&zddl'm(Z(Wney�dZ(YnwdZ)dZ*dZ+dZ,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^dRZ_eOeYeZe[gZ`dSZadTZbdUZcdVZddWZedXZfdYZgdZZhd[Zid\Zjd]Zkd^Zld_Zmd`ZndaZoe�pdbdc�eq�D��Gddde�de�ZrGdfdg�dg�Zsdhdi�Ztdjdk�Zudldm�Zvdndo�ZwGdpdq�dq�ZxGdrds�ds�Zyd�d
ddt�dudv�Zzd�d
ddt�dwdx�Z{d
dydzdd{�d|d}�Z|d
dydzdd{�d~d�Z}zdd
lm#Z#m$Z$m%Z%m~Z~mZm�Z�m�Z�m�Z�m�Z�Wne�y�exeyZ~Zeze{e|e}f\Z�Z�Z�Z�Ynwd�d��Z�e�d�k�r#ddl�Z�e�j�d�d��Z�e�j�d�e���d��d�d�d��e�j�d�d�d�d�d��e�j�d�d�d�d��e����Z�e�j��re��dSe�j��se����dSddl�Z�e�j�D]Z�e�e��Z�e���e���qdSdS)�a�Create portable serialized representations of Python objects.
See module copyreg for a mechanism for registering custom picklers.
See module pickletools source for extensive comments.
Classes:
Pickler
Unpickler
Functions:
dump(object, file)
dumps(object) -> string
load(file) -> object
loads(bytes) -> object
Misc variables:
__version__
format_version
compatible_formats
�)�FunctionType)�dispatch_table)�_extension_registry�_inverted_registry�_extension_cache)�islice)�partialN)�maxsize)�pack�unpack) �PickleError�
PicklingError�UnpicklingError�Pickler� Unpickler�dump�dumps�load�loads)�PickleBufferrTF�4.0)z1.0z1.1z1.2z1.3z2.0z3.0rz5.0��c@�eZdZdZdS)rz6A common base class for the other pickling exceptions.N��__name__�
__module__�__qualname__�__doc__�rr�-/opt/alt/python310/lib64/python3.10/pickle.pyrIsrc@r)r
z]This exception is raised when an unpicklable object is passed to the
dump() method.
Nrrrrr r
Msr
c@r)raThis exception is raised when there is a problem unpickling an object,
such as a security violation.
Note that other exceptions may also be raised during unpickling, including
(but not necessarily limited to) AttributeError, EOFError, ImportError,
and IndexError.
Nrrrrr rTsrc@seZdZdd�ZdS)�_StopcCs
||_dS�N)�value��selfr#rrr �__init__bs
z_Stop.__init__N)rrrr&rrrr r!asr!)�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�GsI01
sI00
�������������������������B�C��������������������������cCsg|]
}t�d|�r|�qS)z[A-Z][A-Z0-9_]+$)�re�match)�.0�xrrr �
<listcomp>�srpc@sFeZdZdZdZdd�Zdd�Zdd�Zdd
d�Zdd
�Z dd�Z
dS)�_FramerricCs||_d|_dSr")�
file_write�
current_frame)r%rrrrr r&�s
z_Framer.__init__cCst��|_dSr")�io�BytesIOrs�r%rrr �
start_framing��z_Framer.start_framingcCs2|jr|j��dkr|jdd�d|_dSdSdS)NrT��force)rs�tell�commit_framervrrr �end_framing�s
�z_Framer.end_framingFcCsn|jr3|j}|��|jks|r5|��}|j}t|�|jkr(|ttdt|���||�t �
�|_dSdSdS)N�<Q)rsr{�_FRAME_SIZE_TARGET� getbufferrr�len�_FRAME_SIZE_MIN�FRAMEr
rtru)r%rz�f�data�writerrr r|�s�z_Framer.commit_framecCs|jr |j�|�S|�|�Sr")rsr�rr�r%r�rrr r��s
z
_Framer.writecCs,|j}|jr|jdd�||�||�dS)NTry)rrrsr|)r%�headerZpayloadr�rrr �write_large_bytes�s
z_Framer.write_large_bytesN)F)rrrr�rr&rwr}r|r�r�rrrr rq�s
rqc@s6eZdZddd�Zdd�Zdd�Zdd �Zd
d�ZdS)
� _UnframerNcCs||_||_d|_dSr")� file_read�
file_readliners)r%r�r�Z file_tellrrr r& s
z_Unframer.__init__cCs�|jr1|j�|�}|dkr%t|�dkr%d|_t|�}|�|�|dd�<|S|t|�kr/td��|St|�}|�|�|dd�<|S�Nr�$pickle exhausted before end of frame)rs�readintor�r�r)r%�buf�nrrr r�s�z_Unframer.readintocCsP|jr#|j�|�}|s|dkrd|_|�|�St|�|kr!td��|S|�|�Sr�)rs�readr�r�r�r%r�r�rrr r�s
�
z_Unframer.readcCsB|jr|j��}|sd|_|��S|ddkrtd��|S|��S)N����
r�)rs�readliner�rr�rrr r�,s
�z_Unframer.readlinecCs2|jr|j��dkrtd��t�|�|��|_dS)N�z4beginning of a new frame before end of current frame)rsr�rrtrur��r%Z
frame_sizerrr �
load_frame9s
�z_Unframer.load_framer")rrrr&r�r�r�r�rrrr r�s
r�c Csb|�d�D]'}|dkrtd�||���z |}t||�}Wqty,td�||��d�w||fS)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�nameZsubpath�parentrrr �
_getattributeBs ����r�c Cs�t|dd�}|dur|Stj����D]*\}}|dks#|dks#|dur$qzt||�d|ur3|WSWqty=YqwdS)z$Find the module an object belong to.rN�__main__Z__mp_main__r)r��sys�modules�copy�itemsr�r�)r�r��module_name�modulerrr �whichmoduleOs
��r�cCsh|dkrdS|��d?d}|j|ddd�}|dkr2|dkr2|dd kr2|d
d@dkr2|dd�}|S)
a�Encode a long to a two's complement little-endian binary string.
Note that 0 is a special case, returning an empty string, to save a
byte in the LONG1 pickling context.
>>> encode_long(0)
b''
>>> encode_long(255)
b'\xff\x00'
>>> encode_long(32767)
b'\xff\x7f'
>>> encode_long(-256)
b'\x00\xff'
>>> encode_long(-32768)
b'\x00\x80'
>>> encode_long(-128)
b'\x80'
>>> encode_long(127)
b'\x7f'
>>>
rr����littleT�� byteorderZsignedr������N)�
bit_length�to_bytes)ro�nbytes�resultrrr �encode_longbsr�cCstj|ddd�S)a\Decode a long from a two's complement little-endian binary string.
>>> decode_long(b'')
0
>>> decode_long(b"\xff\x00")
255
>>> decode_long(b"\xff\x7f")
32767
>>> decode_long(b"\x00\xff")
-256
>>> decode_long(b"\x00\x80")
-32768
>>> decode_long(b"\x80")
-128
>>> decode_long(b"\x7f")
127
r�Tr�)�int�
from_bytes)r�rrr �decode_long�sr�c@s�eZdZd<ddd�dd�Zdd�Zdd �Zd
d�Zdd
�Zdd�Zd=dd�Z dd�Z
dd�Z d>dd�dd�ZiZ
dd�Zee
ed�<dd�Zee
e<dd�Zee
e<dd �Zee
e<d!d"�Zee
e<d#d$�Zee
e<ervd%d&�Zee
e<d'd(�Zee
e<d)d*�Zee
e <d+d,�Z!e!e
e"<d-Z#d.d/�Z$d0d1�Z%e%e
e&<e'dur�e%e
e'<d2d3�Z(d4d5�Z)e)e
e*<d6d7�Z+e+e
e,<d<d8d9�Z-d:d;�Z.e-e
e/<e.e
e<dS)?�_PicklerNT��fix_imports�buffer_callbackcCs�|durt}|dkr
t}nd|krtksntdt��|dur*|dkr*td��||_z|j|_Wnty>td��wt|j�|_ |j j|_|j j
|_i|_t
|�|_|dk|_d|_|od|dk|_dS) a!This takes a binary file for writing a pickle data stream.
The optional *protocol* argument tells the pickler to use the
given protocol; supported protocols are 0, 1, 2, 3, 4 and 5.
The default protocol is 4. It was introduced in Python 3.4, and
is incompatible with previous versions.
Specifying a negative protocol version selects the highest
protocol version supported. The higher the protocol used, the
more recent the version of Python needed to read the pickle
produced.
The *file* argument must have a write() method that accepts a
single bytes argument. It can thus be a file object opened for
binary writing, an io.BytesIO instance, or any other custom
object that meets this interface.
If *fix_imports* is True and *protocol* is less than 3, pickle
will try to map the new Python 3 names to the old module names
used in Python 2, so that the pickle data stream is readable
with Python 2.
If *buffer_callback* is None (the default), buffer views are
serialized into *file* as part of the pickle stream.
If *buffer_callback* is not None, then it can be called any number
of times with a buffer view. If the callback returns a false value
(such as None), the given buffer is out-of-band; otherwise the
buffer is serialized in-band, i.e. inside the pickle stream.
It is an error if *buffer_callback* is not None and *protocol*
is None or smaller than 5.
Nrzpickle protocol must be <= %drz#buffer_callback needs protocol >= 5z"file must have a 'write' attributer�r�)�DEFAULT_PROTOCOL�HIGHEST_PROTOCOL�
ValueError�_buffer_callbackr��_file_writer�� TypeErrorrq�framerr��_write_large_bytes�memor��proto�bin�fastr�)r%�file�protocolr�r�rrr r&�s,#�
z_Pickler.__init__cCs|j��dS)aClears the pickler's "memo".
The memo is the data structure that remembers which objects the
pickler has already seen, so that shared or recursive objects
are pickled by reference and not by value. This method is
useful when re-using picklers.
N)r��clearrvrrr �
clear_memo�sz_Pickler.clear_memocCsrt|d�std|jjf��|jdkr|�ttd|j��|jdkr(|j� �|�
|�|�t�|j��dS)z7Write a pickled representation of obj to the open file.r�z2Pickler.__init__() was not called by %s.__init__()��<BrN)
�hasattrr
� __class__rr�r��PROTOr
r�rw�save�STOPr}�r%r�rrr r�s
�
z
_Pickler.dumpcCs:|jrdSt|j�}|�|�|��||f|jt|�<dS)zStore an object in the memo.N)r�r�r�r��put�id)r%r��idxrrr �memoize�s
z_Pickler.memoizecCsN|jdkrtS|jr|dkrttd|�Sttd|�Stt|��d�dS)Nr�r��<I�ascii�
) r��MEMOIZEr��BINPUTr
�LONG_BINPUT�PUT�repr�encode)r%r�rrr r�s
z_Pickler.putcCs@|jr|dkrttd|�Sttd|�Stt|��d�dS)Nr�r�r�r�r�)r��BINGETr
�LONG_BINGET�GETr�r��r%�irrr �gets
z_Pickler.getc
Cs�|j��|�|�}|dur|r|�|�dS|j�t|��}|dur/|�|�|d��dSt}t |dd�}|dur?||�}|tur�t
|�}|j�|�}|durX|||�dSt |dt��|�}|durj||�}n3t
|t
�rv|�|�dSt |dd�}|dur�||j�}nt |dd�}|dur�|�}n td|j|f��t|t�r�|�||�dSt|t�s�td|��t|�} d| kr�d ks�ntd
|��|j|d|i�dS)NrZreducer_overrider�
__reduce_ex__�
__reduce__zCan't pickle %r object: %rz%s must return string or tupler��z2Tuple returned by %s must have two to six elementsr�)r�r|�
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�pidroZrv�reduce�tr��lrrr r�sZ
�
�z
_Pickler.savecCsdSr"rr�rrr r�]sz_Pickler.persistent_idcCs\|jr|j|dd�|�t�dSz|�tt|��d�d�WdSty-td��w)NF)r�r�r��2persistent IDs in protocol 0 must be ASCII strings) r�r�r�� BINPERSID�PERSIDr�r��UnicodeEncodeErrorr
�r%r�rrr r�as"��z_Pickler.save_pers�r�c
Cs6t|t�s td��t|�std��|j}|j} t|dd�}
|jdkrw|
dkrw|\}}}t|d�s7td� |
���|durG||j
urGtd � |
���|jd
kr]||�||�||�| t�n\t|j
|g|�Ri|��}||�|d�| t�nB|jdkr�|
dkr�|d
}t|d�s�td��|dur�||j
ur�td��|dd�}||�||�| t�n||�||�| t�|dur�t|�|jvr�| t|�|jt|�d
��n|�|�|dur�|�|�|dur�|�|�|du�r|dur�||�| t�dS||�||�||�| t�| t�| t�dSdS)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 classrr�
__newobj__rz+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_EXrr�REDUCE�NEWOBJr�r��POPr�r��_batch_appends�_batch_setitems�BUILD�TUPLE2)
r%�func�args�stateZ listitemsZ dictitemsZstate_setterr�r�r�Z func_name�cls�kwargsrrr r�ms|
��
��
"
�z_Pickler.save_reducecCs|�t�dSr")r��NONEr�rrr � save_none�rxz_Pickler.save_nonecCs<|jdkr|�|rt�dSt�dS|�|rtnt�dS)Nr�)r�r��NEWTRUE�NEWFALSE�TRUE�FALSEr�rrr � save_bool�s
z_Pickler.save_boolcCs0|jr?|dkr'|dkr|�ttd|��dS|dkr'|�ttd|��dSd|kr1dkr?nn|�ttd|��dS|jd krlt|�}t|�}|d
kr^|�t td|�|�dS|�t
td|�|�dSd|krvdkr�nn|�tt|��
d�d�dS|�tt|��
d�d
�dS)Nrr�r���<Hi�i����<ir�r�r�r�sL
)r�r��BININT1r
�BININT2�BININTr�r�r��LONG1�LONG4�INTr�r��LONG�r%r�Zencodedr�rrr � save_long�s,
� z_Pickler.save_longcCs>|jr|�ttd|��dS|�tt|��d�d�dS)N�>dr�r�)r�r��BINFLOATr
�FLOATr�r�r�rrr �
save_floats z_Pickler.save_floatcCs�|jdkr!|s|jtd|d�dS|jtjt|d�df|d�dSt|�}|dkr6|�tt d|�|�n3|dkrK|jdkrK|�
tt d |�|�n||jj
kr]|�
tt d
|�|�n|�tt d
|�|�|�|�dS)Nr�rr�latin1r�r����rr~r�)r�r��bytes�codecsr�r�r�r��SHORT_BINBYTESr
r�� BINBYTES8r�r�BINBYTESr��r%r�r�rrr �
save_bytess"
��z_Pickler.save_bytescCs�|jdkr|s|jtd|d�dS|jtt|�f|d�dSt|�}||jjkr4|�tt d|�|�n|�
tt d|�|�|�|�dS)Nrrrr~)r�r�� bytearrayr/r�r�rr��
BYTEARRAY8r
r�r�r4rrr �save_bytearray)s
�z_Pickler.save_bytearraycCs�|jdkr td��|���X}|jstd��d}|jdur#t|�|��}|r8|jr0|�|���n-|� |���n|�
t�|jrM|�
t�Wd�dSWd�dSWd�dSWd�dS1shwYdS)Nrz0PickleBuffer can only pickled with protocol >= 5zHPickleBuffer can not be pickled when pointing to a non-contiguous bufferT)
r�r
�raw�
contiguousr��bool�readonlyr5�tobytesr8r��NEXT_BUFFER�READONLY_BUFFER)r%r��mZin_bandrrr �save_picklebuffer9s,
��
�"�z_Pickler.save_picklebuffercCs|jrW|�dd�}t|�}|dkr#|jdkr#|�ttd|�|�n^|dkr8|jdkr8|�ttd|�|�nI||j j
krJ|�ttd|�|�n7|�ttd|�|�n*|�d d
�}|�dd�}|�d
d�}|�dd�}|�dd�}|�t
|�d�d�|�|�dS)N�utf-8�
surrogatepassr�rr�r.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'rrr �save_strSs&�z_Pickler.save_strcCs<|s|jr|�t�dS|�tt�dSt|�}|j}|j}|dkr[|jdkr[|D]}||�q*t |�|vrM|�
|t |�d�}|�t||�dS|�t|�|�
|�dS|j}|t�|D]}||�qdt |�|vr�|�
|t |�d�}|jr�|t|�dS|t|d|�dS|t�|�
|�dS)Nr�r�rr�)r�r��EMPTY_TUPLE�MARK�TUPLEr�r�r�r�r�r�r�_tuplesize2coder��POP_MARK)r%r�r�r�r�Zelementr�r�rrr �
save_tuplejs@
�
�
�z_Pickler.save_tuplecCs8|jr |�t�n|�tt�|�|�|�|�dSr")r�r��
EMPTY_LISTrQ�LISTr�r
r�rrr � save_list�s
z_Pickler.save_listi�cCs�|j}|j}|js|D]
}||�|t�qdSt|�} tt||j��}t|�}|dkr?|t �|D]}||�q3|t
�n|rK||d�|t�||jkrRdSq�NTr�r)r�r�r��APPEND�iter�listr�
_BATCHSIZEr�rQ�APPENDS)r%r�r�r�ro�it�tmpr�rrr r
�s,
�z_Pickler._batch_appendscCs<|jr |�t�n|�tt�|�|�|�|���dSr")r�r��
EMPTY_DICTrQ�DICTr�rr�r�rrr � save_dict�s
z_Pickler.save_dictc Cs�|j}|j}|js|D]\}}||�||�|t�qdSt|�} tt||j��}t|�}|dkrK|t �|D]\}}||�||�q9|t
�n|r_|d\}}||�||�|t�||jkrfdSq#rY)r�r�r��SETITEMr[r\rr]r�rQ�SETITEMS) r%r�r�r��k�vr_r`r�rrr r�s4
�z_Pickler._batch_setitemscCs�|j}|j}|jdkr|jtt|�f|d�dS|t�|�|�t|�} tt ||j
��}t|�}|dkrG|t�|D]}||�q<|t
�||j
krNdSq&)NrrTr)r�r�r�r��setr\� EMPTY_SETr�r[rr]r�rQ�ADDITEMS)r%r�r�r�r_Zbatchr��itemrrr �save_set�s&
�z_Pickler.save_setcCs�|j}|j}|jdkr|jtt|�f|d�dS|t�|D]}||�qt|�|jvr>|t |�
|jt|�d��dS|t�|�|�dS)Nrrr)
r�r�r�r�� frozensetr\rQr�r�rTr�� FROZENSETr�)r%r�r�r�rkrrr �save_frozenset s
z_Pickler.save_frozensetc
Cs<|j}|j}|durt|dd�}|dur|j}t||�}zt|dd�tj|}t||�\}}Wnt t
tfyDtd|||f�d�w||urRtd|||f��|j
dkr�t�||f�} | r�| dkro|ttd| ��dS| d kr~|ttd
| ��dS|ttd| ��dS|�d�d}
||ur�|
}|j
d
kr�|�|�|�|�|t�nm||ur�|�t||
f�n`|j
dkr�|tt|d�dt|d�d�nH|jr�tj}tj}||f|vr�|||f\}}n||vr�||}z|tt|d�dt|d�d�Wnt�ytd|||j
f�d�w|�|�dS)Nrr��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�rrrr�rr�rBr�r�z?can't pickle global identifier '%s.%s' using pickle protocol %i) r�r�r�rr��
__import__r�r�r��ImportError�KeyErrorr�r
r�rr��EXT1r
�EXT2�EXT4�
rpartitionr��STACK_GLOBALr��GLOBALr/r��_compat_pickleZREVERSE_NAME_MAPPINGZREVERSE_IMPORT_MAPPINGrr�)
r%r�r�r�r�r�r�Zobj2r��codeZlastnameZr_name_mappingZr_import_mappingrrr r� s�
������
��
���
�
����z_Pickler.save_globalcCs`|td�ur|jtd|d�S|tt�ur|jttf|d�S|td�ur+|jtd|d�S|�|�S)Nr"r.).)r�r�r�r�r�rrr � save_typebs
z_Pickler.save_typer")T)NNNN)0rrrr&r�rr�r�r�r�r�r�r�r�rr�rr;r(r�r,�floatr5r/r8r6�_HAVE_PICKLE_BUFFERrArrOr�rUr�rXr\r]r
rc�dictr'rrlrhrormr�r}rrrrr r��sl�9
F��u
1
B r�c@s�eZdZddddd�dd�Zdd �Zd
d�Zdd
�ZiZdd�Zeee d<dd�Z
e
eed<dd�Zeee
d<dd�Zeeed<dd�Zeeed<dd�Zeeed<dd�Zeeed<dd�Zeeed<dd �Zeeed<d!d"�Zeeed<d#d$�Zeeed<d%d&�Zeeed<d'd(�Z e ee!d<d)d*�Z"e"ee#d<d+d,�Z$e$ee%d<d-d.�Z&e&ee'd<d/d0�Z(d1d2�Z)e)ee*d<d3d4�Z+e+ee,d<d5d6�Z-e-ee.d<d7d8�Z/e/ee0d<d9d:�Z1e1ee2d<d;d<�Z3e3ee4d<d=d>�Z5e5ee6d<d?d@�Z7e7ee8d<dAdB�Z9e9ee:d<dCdD�Z;e;ee<d<dEdF�Z=e=ee>d<dGdH�Z?e?ee@d<dIdJ�ZAeAeeBd<dKdL�ZCeCeeDd<dMdN�ZEeEeeFd<dOdP�ZGeGeeHd<dQdR�ZIeIeeJd<dSdT�ZKeKeeLd<dUdV�ZMeMeeNd<dWdX�ZOeOeePd<dYdZ�ZQeQeeRd<d[d\�ZSeSeeTd<d]d^�ZUeUeeVd<d_d`�ZWeWeeXd<dadb�ZYdcdd�ZZeZee[d<dedf�Z\e\ee]d<dgdh�Z^e^ee_d<didj�Z`e`eead<dkdl�Zbebeecd<dmdn�Zdedeeed<dodp�Zfefeegd<dqdr�Zheheeid<dsdt�Zjejeekd<dudv�Zldwdx�Zmdydz�Zneneeod<d{d|�Zpepeeqd<d}d~�Zrereesd<dd��Zteteeud<d�d��Zveveewd<d�d��Zxexeeyd<d�d��Zzezee{d<d�d��Z|e|ee}d<d�d��Z~e~eed<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<d�d��Z�e�ee�d<dS)��
_UnpicklerT�ASCII�strictN�r��encoding�errors�bufferscCsH|durt|�nd|_|j|_|j|_i|_||_||_d|_ ||_
dS)a�This takes a binary file for reading a pickle data stream.
The protocol version of the pickle is detected automatically, so
no proto argument is needed.
The argument *file* must have two methods, a read() method that
takes an integer argument, and a readline() method that requires
no arguments. Both methods should return bytes. Thus *file*
can be a binary file object opened for reading, an io.BytesIO
object, or any other custom object that meets this interface.
The file-like object must have two methods, a read() method
that takes an integer argument, and a readline() method that
requires no arguments. Both methods should return bytes.
Thus file-like object can be a binary file object opened for
reading, a BytesIO object, or any other custom object that
meets this interface.
If *buffers* is not None, it should be an iterable of buffer-enabled
objects that is consumed each time the pickle stream references
an out-of-band buffer view. Such buffers have been given in order
to the *buffer_callback* of a Pickler object.
If *buffers* is None (the default), then the buffers are taken
from the pickle stream, assuming they are serialized there.
It is an error for *buffers* to be None if the pickle stream
was produced with a non-None *buffer_callback*.
Other optional arguments are *fix_imports*, *encoding* and
*errors*, which are used to control compatibility support for
pickle stream generated by Python 2. If *fix_imports* is True,
pickle will try to map the old Python 2 names to the new names
used in Python 3. The *encoding* and *errors* tell pickle how
to decode 8-bit string instances pickled by Python 2; these
default to 'ASCII' and 'strict', respectively. *encoding* can be
'bytes' to read these 8-bit string instances as bytes objects.
Nr)r[�_buffersr��_file_readliner��
_file_readr�r�r�r�r�)r%r�r�r�r�r�rrr r&ss'
z_Unpickler.__init__c
Cs�t|d�std|jjf��t|j|j�|_|jj|_|jj |_ |jj
|_
g|_g|_|jj
|_
d|_|j}|j}z |d�}|sCt�||d|�q;ty`}z |jWYd}~Sd}~ww)z�Read a pickled object representation from the open file.
Return the reconstituted object hierarchy specified in the file.
r�z4Unpickler.__init__() was not called by %s.__init__()rTr�N)r�rr�rr�r�r�� _unframerr�r�r�� metastack�stack�appendr�r��EOFErrorr!r#)r%r�r��keyZstopinstrrr r�s2
�
���z_Unpickler.loadcCs |j}|j��|_|jj|_|Sr")r�r��popr��r%r�rrr �pop_mark�s
z_Unpickler.pop_markcCstd��)Nz%unsupported persistent id encountered)rrrrr �persistent_load�sz_Unpickler.persistent_loadcCs:|�d�d}d|krtksntd|��||_dS)Nr�rzunsupported pickle protocol: %d)r�r�r�r�)r%r�rrr �
load_proto�s
z_Unpickler.load_protorcCs8td|�d��\}|tjkrtd|��|j�|�dS)Nr~�zframe size > sys.maxsize: %d)rr�r�r r�r�r�r�rrr r��s
z_Unpickler.load_framecCsFz
|��dd��d�}Wntytd��w|�|�|��dS)Nr�r�r�)r��decode�UnicodeDecodeErrorrr�r�rrrr �load_persid�s��z_Unpickler.load_persidcCs|j��}|�|�|��dSr")r�r�r�r�rrrr �load_binpersid�s
z_Unpickler.load_binpersidcCs|�d�dSr"�r�rvrrr � load_none�rxz_Unpickler.load_nonecC�|�d�dS)NFr�rvrrr �
load_false�rxz_Unpickler.load_falsecCr�)NTr�rvrrr � load_true�rxz_Unpickler.load_truecCsL|��}|tdd�krd}n|tdd�krd}nt|d�}|�|�dS)Nr�FTr)r�rrr�r�)r%r��valrrr �load_int�s
z_Unpickler.load_intcC�|�td|�d��d�dS)Nrrr�r�rr�rvrrr �load_binint�z_Unpickler.load_binintcCs|�|�d�d�dS�Nr�r)r�r�rvrrr �load_binint1sz_Unpickler.load_binint1cCr�)Nrr�rr�rvrrr �load_binint2r�z_Unpickler.load_binint2cCs@|��dd�}|r|ddkr|dd�}|�t|d��dS)Nr��Lr)r�r�r�)r%r�rrr � load_longsz_Unpickler.load_longcCs*|�d�d}|�|�}|�t|��dSr�)r�r�r�r�rrr �
load_long1s
z_Unpickler.load_long1cCs>td|�d��\}|dkrtd��|�|�}|�t|��dS)Nrrrz#LONG pickle has negative byte count)rr�rr�r�r�rrr �
load_long4s
z_Unpickler.load_long4cCs|�t|��dd���dS�Nr�)r�r~r�rvrrr �
load_float"r�z_Unpickler.load_floatcCr�)Nr)r�rr�rvrrr �
load_binfloat&r�z_Unpickler.load_binfloatcCs|jdkr|S|�|j|j�S)Nr/)r�r�r�r$rrr �_decode_string*s
z_Unpickler._decode_stringcCsl|��dd�}t|�dkr#|d|dkr#|ddvr#|dd�}ntd��|�|�t�|�d��dS)Nr�r�rs"'r�z)the STRING opcode argument must be quoted)r�r�rr�r�r0�
escape_decoder�rrr �load_string3s
(z_Unpickler.load_stringcCs@td|�d��\}|dkrtd��|�|�}|�|�|��dS)Nrrrz(BINSTRING pickle has negative byte count)rr�rr�r��r%r�r�rrr �load_binstring=s
z_Unpickler.load_binstringcC�:td|�d��\}|tkrtdt��|�|�|��dS)Nr�rz2BINBYTES exceeds system's maximum size of %d bytes�rr�r rr��r%r�rrr �
load_binbytesF��z_Unpickler.load_binbytescCs |�t|��dd�d��dS)Nr�rI)r�r�r�rvrrr �load_unicodeNs z_Unpickler.load_unicodecC�Btd|�d��\}|tkrtdt��|�t|�|�dd��dS)Nr�rz4BINUNICODE exceeds system's maximum size of %d bytesrBrC�rr�r rr�r�r�rrr �load_binunicodeR��z_Unpickler.load_binunicodecCr�)Nr~r�z5BINUNICODE8 exceeds system's maximum size of %d bytesrBrCr�r�rrr �load_binunicode8Zr�z_Unpickler.load_binunicode8cCr�)Nr~r�z3BINBYTES8 exceeds system's maximum size of %d bytesr�r�rrr �load_binbytes8br�z_Unpickler.load_binbytes8cCsFtd|�d��\}|tkrtdt��t|�}|�|�|�|�dS)Nr~r�z4BYTEARRAY8 exceeds system's maximum size of %d bytes)rr�r rr6r�r�)r%r��brrr �load_bytearray8js�
z_Unpickler.load_bytearray8cCsF|jdur td��zt|j�}Wntytd��w|�|�dS)NzLpickle stream refers to out-of-band data but no *buffers* argument was givenznot enough out-of-band buffers)r�r�next�
StopIterationr�)r%r�rrr �load_next_bufferts
�z_Unpickler.load_next_buffercCs\|jd}t|��}|js|��|jd<Wd�dSWd�dS1s'wYdSr�)r��
memoryviewr<�
toreadonly)r%r�r@rrr �load_readonly_buffers
�"�z_Unpickler.load_readonly_buffercCs,|�d�d}|�|�}|�|�|��dSr�)r�r�r�r�rrr �load_short_binstring�s
z_Unpickler.load_short_binstringcCs"|�d�d}|�|�|��dSr�)r�r�r�rrr �load_short_binbytes�sz_Unpickler.load_short_binbytescCs*|�d�d}|�t|�|�dd��dS)Nr�rrBrC)r�r�r�r�rrr �load_short_binunicode�sz _Unpickler.load_short_binunicodecC�|��}|�t|��dSr")r�r�r�r�rrr �
load_tuple��z_Unpickler.load_tuplecCr�)Nrr�rvrrr �load_empty_tuple�rxz_Unpickler.load_empty_tuplecCs|jdf|jd<dSr��r�rvrrr �load_tuple1�sz_Unpickler.load_tuple1cCs$|jd|jdfg|jdd�<dS)Nr�r�r�rvrrr �load_tuple2�s$z_Unpickler.load_tuple2cCs,|jd|jd|jdfg|jdd�<dS)N���r�r�r�rvrrr �load_tuple3�s,z_Unpickler.load_tuple3cCs|�g�dSr"r�rvrrr �load_empty_list�rxz_Unpickler.load_empty_listcCs|�i�dSr"r�rvrrr �load_empty_dictionary�rxz _Unpickler.load_empty_dictionarycCs|�t��dSr")r�rhrvrrr �load_empty_set�sz_Unpickler.load_empty_setcCr�r")r�r�rmr�rrr �load_frozenset�r�z_Unpickler.load_frozensetcCs|��}|�|�dSr")r�r�r�rrr � load_list�sz_Unpickler.load_listcs4|����fdd�tdt��d�D�}|�|�dS)Ncsi|]}�|�|d�qS)r�r)rnr��r�rr �
<dictcomp>�s�z(_Unpickler.load_dict.<locals>.<dictcomp>rr�)r��ranger�r�)r%�drr�r � load_dict�s
�z_Unpickler.load_dictc
Csv|st|t�rt|d�r/z||�}Wn!ty.}ztd|jt|�ft��d��d}~ww|�|�}|� |�dS)NZ__getinitargs__zin constructor for %s: %sr�)
r�r�r�r�rr�r��exc_inforr�)r%�klassrr#�errrrr �_instantiate�s��
���
z_Unpickler._instantiatecCsL|��dd��d�}|��dd��d�}|�||�}|�||���dS)Nr�r�)r�r��
find_classr�r��r%r�r�r�rrr � load_inst�sz_Unpickler.load_instcCs"|��}|�d�}|�||�dS�Nr)r�r�r�)r%rrrrr �load_obj�s
z_Unpickler.load_objcCs4|j��}|j��}|j|g|�R�}|�|�dSr"�r�r�rr�)r%rrr�rrr �load_newobj�s
z_Unpickler.load_newobjcCsD|j��}|j��}|j��}|j|g|�Ri|��}|�|�dSr"r�)r%rrrr�rrr �load_newobj_ex�s
z_Unpickler.load_newobj_excCsF|��dd��d�}|��dd��d�}|�||�}|�|�dS)Nr�rB)r�r�r�r�r�rrr �load_global�sz_Unpickler.load_globalcCsJ|j��}|j��}t|�tust|�turtd��|�|�||��dS)NzSTACK_GLOBAL requires str)r�r�r�r�rr�r�)r%r�r�rrr �load_stack_global�s
z_Unpickler.load_stack_globalcCs|�d�d}|�|�dSr�)r��
get_extension�r%r|rrr � load_ext1sz_Unpickler.load_ext1cC� td|�d��\}|�|�dS)Nrr��rr�r�r�rrr � load_ext2
�z_Unpickler.load_ext2cCr�)Nrrr�r�rrr � load_ext4r�z_Unpickler.load_ext4cCspg}t�||�}||ur|�|�dSt�|�}|s(|dkr"td��td|��|j|�}|t|<|�|�dS)NrzEXT specifies code <= 0zunregistered extension code %d)rr�r�rrr�r�)r%r|Znilr�r�rrr r�s
z_Unpickler.get_extensioncCs�t�d||�|jdkr*|jr*||ftjvr tj||f\}}n
|tjvr*tj|}t|dd�|jdkr?ttj ||�dSt
tj ||�S)Nzpickle.find_classr�rrpr)r��auditr�r�r{ZNAME_MAPPINGZIMPORT_MAPPINGrrr�r�r�)r%r�r�rrr r�$s
z_Unpickler.find_classcCs&|j}|��}|d}||�|d<dSr��r�r�)r%r�rrrrr �load_reduce2sz_Unpickler.load_reducecCs|jr |jd=dS|��dSr�)r�r�rvrrr �load_pop9sz_Unpickler.load_popcCs|��dSr")r�rvrrr �
load_pop_mark@sz_Unpickler.load_pop_markcCs|�|jd�dSr�)r�r�rvrrr �load_dupDsz_Unpickler.load_dupcCsNt|��dd��}z|�|j|�WdSty&d|��}t|�d�w)Nr��Memo value not found at index )r�r�r�r�rtr)r%r��msgrrr �load_getHs
�z_Unpickler.load_getc
CsR|�d�d}z|�|j|�WdSty(}z
d|��}t|�d�d}~ww)Nr�rr�)r�r�r�rtr�r%r��excr�rrr �load_bingetQs
��z_Unpickler.load_bingetc
CsVtd|�d��\}z|�|j|�WdSty*}z
d|��}t|�d�d}~ww)Nr�rr�)rr�r�r�rtrr�rrr �load_long_bingetZs
��z_Unpickler.load_long_bingetcCs8t|��dd��}|dkrtd��|jd|j|<dS)Nr�rznegative PUT argument)r�r�r�r�r�r�rrr �load_putcsz_Unpickler.load_putcCs2|�d�d}|dkrtd��|jd|j|<dS)Nr�rznegative BINPUT argumentr�)r�r�r�r�r�rrr �load_binputjsz_Unpickler.load_binputcCs6td|�d��\}|tkrtd��|jd|j|<dS)Nr�rznegative LONG_BINPUT argumentr�)rr�r r�r�r�r�rrr �load_long_binputqsz_Unpickler.load_long_binputcCs|j}|jd|t|�<dSr�)r�r�r�)r%r�rrr �load_memoizexsz_Unpickler.load_memoizecCs$|j}|��}|d}|�|�dSr�)r�r�r�)r%r�r#r\rrr �load_append}sz_Unpickler.load_appendcCsX|��}|jd}z|j}Wn tyYnw||�dS|j}|D]}||�q#dSr�)r�r��extendr�r�)r%r�Zlist_objrr�rkrrr �load_appends�s
�
�z_Unpickler.load_appendscCs*|j}|��}|��}|d}|||<dSr�r�)r%r�r#r�r�rrr �load_setitem�s
z_Unpickler.load_setitemcCs@|��}|jd}tdt|�d�D]}||d|||<qdS)Nr�rr�r�)r�r�r�r�)r%r�r�r�rrr �
load_setitems�s
�z_Unpickler.load_setitemscCsF|��}|jd}t|t�r|�|�dS|j}|D]}||�qdSr�)r�r�r�rh�update�add)r%r�Zset_objrrkrrr �
load_additems�s
�z_Unpickler.load_additemsc
Cs�|j}|��}|d}t|dd�}|dur||�dSd}t|t�r,t|�dkr,|\}}|rN|j}tj}|� �D]\}} t
|�turI| |||�<q8| ||<q8|r_|� �D]\}} t||| �qTdSdS)Nr��__setstate__r�)
r�r�r�r�r�r��__dict__r��internr�r�r��setattr)
r%r�r�inst�setstateZ slotstateZ inst_dictrrfrgrrr �
load_build�s,
�z_Unpickler.load_buildcCs"|j�|j�g|_|jj|_dSr")r�r�r�rvrrr � load_mark�sz_Unpickler.load_markcCs|j��}t|��r")r�r�r!r$rrr � load_stop�s
z_Unpickler.load_stop)�rrrr&rr�r�r�r�r�r�r�r�rr�r�r�rr�rr�rr�r%r�r"r�r r�r!r�r&r�r#r�r$r�r+r�r*r�r��STRINGr�� BINSTRINGr�r3r�rNr�rLr�rKr�r2r�r7r�r>r�r?r��SHORT_BINSTRINGr�r1r�rJr�rRr�rPr��TUPLE1r�rr��TUPLE3r�rVr�rar�rir�rnr�rWr�rbr�r��INSTr��OBJr�rr�r r�rzr�ryr�rur�rvr�rwr�r�r�r
r�rr�rTr��DUPr�r�rr�rr�rr�rr�rr�rr�rrZrr^r rdr
rer
rjrrrrQrr�rrrr r�qs(�0 r�r�cCst||||d��|�dS�Nr�)r�r)r�r�r�r�r�rrr �_dump�s�r cCs*t��}t||||d��|�|��}|Sr)rtrur�r�getvalue)r�r�r�r�r��resrrr �_dumps�s�r#r�r�r�cCst|||||d���S)N�r�r�r�r�)r�r)r�r�r�r�r�rrr �_load�s
��r%cCs2t|t�r td��t�|�}t|||||d���S)Nz%Can't load pickle from unicode stringr$)r�r�r�rtrur�r)�sr�r�r�r�r�rrr �_loads�s
��r'cCsddl}|��Sr�)�doctestZtestmod)r(rrr �_testsr)r�z$display contents of the pickle files)�description�pickle_file�br�*zthe pickle file)r��nargs�helpz-tz--test�
store_truezrun self-test suite)�actionr/z-vz)run verbosely; only affects self-test runr")�r�typesr�copyregrrrr� itertoolsr� functoolsrr�r Zstructr
rrlrtr0r{�__all__�_picklerr�rrsr/r6Zbytes_typesZformat_versionZcompatible_formatsr�r�� Exceptionrr
rr!Zorg.python.corer'rQr�rrTrr+r%r"r r&r!rrr�r
rrrrNrLrZrrzrbrar^r�r�rr�rWrVrr�r�r�rdrRrPrer*rrr�rrurvrwrrrrrr#r$rSr3r1rJrKr2rirjrnr ryr�r�r7r>r?r�dirrqr�r�r�r�r�r�r�r r#r%r'rrrrrrr)r�argparse�ArgumentParser�parser�add_argumentZFileType�
parse_argsr�testr+Z
print_helpZpprintr�r�rrrr �<module>sN
�
�?;
_i�� 0
�
�
���
�