3 \���@sddlmZddlmZddlmZmZmZddlmZddl m Z ddl Z ddl m Z ddl mZmZddlZddlZddlZddlZd d d d d ddddg ZeefZdZdddddddgZdZdZGdd �d e�ZGdd �d e�ZGdd �d e�ZGdd�de�Z ydd l!m"Z"Wne#k �r.dZ"YnXd!Z$d"Z%d#Z&d$Z'd%Z(d&Z)d'Z*d(Z+d)Z,d*Z-d+Z.d,Z/d-Z0d.Z1d/Z2d0Z3d1Z4d2Z5d3Z6d4Z7d5Z8d6Z9d7Z:d8Z;d9ZdZAd?ZBd@ZCdAZDdBZEdCZFdDZGdEZHdFZIdGZJdHZKdIZLdJZMdKZNdLZOdMZPdNZQdOZRdPZSdQZTdRZUdSZVdTZWdUZXdVZYdWZZeJeTeUeVgZ[dXZ\dYZ]dZZ^d[Z_d\Z`d]Zad^Zbd_Zcd`ZddaZedbZfdcZgejhddde�ei�D��Gdfdg�dg�ZjGdhdi�di�Zkdjdk�Zldldm�Zmdndo�Zndpdq�ZoGdrds�ds�ZpGdtdu�du�Zqd�dvdw�dxdy�Zrd�dvdw�dzd{�Zsdvd|d}d~�dd��Ztdvd|d}d~�d�d��Zuy0dd�lvmZmZmZmwZwmxZxmyZymzZzm{Z{m|Z|Wn4e#k �r^epeqZwZxereseteuf\ZyZzZ{Z|YnXd�d��Z}e~d�k�rddlZej�d�d��Z�e�j�d�ej�d��d�d�d��e�j�d�d�d�d�d��e�j�d�d�d�d��e�j��Z�e�j��r�e}�n>e�j��s�e�j��n,ddl�Z�x"e�j�D]Z�e{e��Z�e�j�e���q�WdS)��)� FunctionType)�dispatch_table)�_extension_registry�_inverted_registry�_extension_cache)�islice)�partialN)�maxsize)�pack�unpack� PickleError� PicklingError�UnpicklingError�Pickler� Unpickler�dump�dumps�load�loadsz4.0z1.0z1.1z1.2z1.3z2.0z3.0��c@s eZdZdS)r N)�__name__� __module__� __qualname__�rr�/usr/lib64/python3.6/pickle.pyr @sc@s eZdZdS)r N)rrrrrrrr Dsc@s eZdZdS)rN)rrrrrrrrKs c@seZdZdd�ZdS)�_StopcCs ||_dS)N)�value)�selfrrrr�__init__Ysz_Stop.__init__N)rrrrrrrrrXsr)� 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|]}tjd|�r|�qS)z[A-Z][A-Z0-9_]+$)�re�match)�.0�xrrr� �srfc@s:eZdZdZdd�Zdd�Zdd�Zdd d �Zd d �ZdS)�_Framer�@icCs||_d|_dS)N)� file_write� current_frame)rrirrrr�sz_Framer.__init__cCstj�|_dS)N)�io�BytesIOrj)rrrr� start_framing�sz_Framer.start_framingcCs*|jr&|jj�dkr&|jdd�d|_dS)NrT)�force)rj�tell� commit_frame)rrrr� end_framing�s z_Framer.end_framingFc Cst|jrp|j}|j�|jks|rp|j��2}t|�}|j}|t�|td|��||�WdQRX|jd�|j �dS)Nzz&Can't get local attribute {!r} on {!r}z Can't get attribute {!r} on {!r})�split�AttributeError�format�getattr)�obj�nameZsubpath�parentrrr� _getattributes r�c Cszt|dd�}|dk r|Sx\ttjj��D]J\}}|dks(|dkrBq(yt||�d|krZ|SWq(tk rpYq(Xq(WdS)Nr�__main__r)r��list�sys�modules�itemsr�r�)r�r�� module_name�modulerrr� whichmodules  r�cCsh|dkr dS|j�d?d}|j|ddd�}|dkrd|dkrd|d dkrd|d d @dkrd|dd �}|S)Nrr�rr��littleT)� byteorder�signed����r������r�)� bit_length�to_bytes)re�nbytes�resultrrr� encode_long$s r�cCstj|ddd�S)Nr�T)r�r�)�int� from_bytes)ryrrr� decode_longBsr�c@sheZdZd7dd�dd�Zdd�Zdd �Zd d �Zd d �Zdd�Zd8dd�Z dd�Z dd�Z d9dd�Z iZ dd�Zee ed�<dd�Zee e<dd�Zee e<dd�Zee e<d d!�Zee e<d"d#�Zee e<d$d%�Zee e<d&d'�Zee e<d(Zd)d*�Zd+d,�Z e e e!<e"dk �re e e"<d-d.�Z#d/d0�Z$e$e e%<d1d2�Z&e&e e'<d:d3d4�Z(d5d6�Z)e(e e*<e)e e<dS);�_PicklerNT)� fix_importsc Cs�|dkr t}|dkrt}n$d|ko,tkns>tdt��y |j|_Wntk rftd��YnXt|j�|_|jj|_i|_ t |�|_ |dk|_ d|_ |o�|dk|_dS)Nrzpickle protocol must be <= %dz"file must have a 'write' attributer�r)�DEFAULT_PROTOCOL�HIGHEST_PROTOCOL� ValueErrorr{� _file_writer�� TypeErrorrg�framer�memor��proto�bin�fastr�)r�file�protocolr�rrrr[s"      z_Pickler.__init__cCs|jj�dS)N)r��clear)rrrr� clear_memo�sz_Pickler.clear_memocCsrt|d�std|jjf��|jdkr<|jttd|j��|jdkrP|jj �|j |�|jt �|jj �dS)Nr�z2Pickler.__init__() was not called by %s.__init__()r�zy |jtt|�jd�d�Wntk r\td��YnXdS)NF)r�r�r�z2persistent IDs in protocol 0 must be ASCII strings) r�r�r{� BINPERSID�PERSIDr�r��UnicodeEncodeErrorr )rr�rrrr�s  z_Pickler.save_persc Cst|t�std��t|�s"td��|j}|j}t|dd�} |jdkr�| dkr�|\} }} t| d�sntdj | ���|dk r�| |j k r�td j | ���|jd kr�|| �||�|| �|t �n,t | j | f|�| �}||�|f�|t�n�|jdko�| d k�r\|d } t| d��std ��|dk �r6| |j k �r6td��|dd�}|| �||�|t�n||�||�|t�|dk �r�t|�|jk�r�|t|j|jt|�d ��n |j|�|dk �r�|j|�|dk �r�|j|�|dk �r�||�|t�dS)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� __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) r�func�args�stateZ listitemsZ dictitemsr�r�r{Z func_name�cls�kwargsrrrr�sd           "      z_Pickler.save_reducecCs|jt�dS)N)r{�NONE)rr�rrr� save_none�sz_Pickler.save_nonecCs4|jdkr|j|rtnt�n|j|r*tnt�dS)Nr�)r�r{�NEWTRUE�NEWFALSE�TRUE�FALSE)rr�rrr� save_bool�s z_Pickler.save_boolcCs�|jr~|dkrN|dkr.|jttd|��dS|dkrN|jttd|��dSd |ko`dknr~|jttd|��dS|jd kr�t|�}t|�}|d kr�|jt td|�|�n|jt td|�|�dS|jt t |�j d �d �dS)Nrr�zdr�r�)r�r{�BINFLOATr �FLOATr�r�)rr�rrr� save_float�sz_Pickler.save_floatcCs�|jdkr@|s |jtf|d�n|jtjt|d�df|d�dSt|�}|dkrj|jtt d|�|�nD|dkr�|jdkr�|jt t d|�|�n|jt t d |�|�|j |�dS) Nr)r��latin1r�zdSq>WdS)Nr�r) r�r{r��APPEND�iterr�r� _BATCHSIZErtr�APPENDS)rr�r�r{re�it�tmprzrrrr�s*       z_Pickler._batch_appendscCs<|jr|jt�n|jtt�|j|�|j|j��dS)N)r�r{� EMPTY_DICTr�DICTr�r�r�)rr�rrr� save_dict.s   z_Pickler.save_dictc Cs�|j}|j}|js@x(|D] \}}||�||�|t�qWdSt|�}x�tt||j��}t|�}|dkr�|t �x |D]\}}||�||�qxW|t �n(|r�|d\}}||�||�|t�||jkrJdSqJWdS)Nr�r) r�r{r��SETITEMr"r�rr#rtr�SETITEMS) rr�r�r{�k�vr%r&rzrrrr�;s2     z_Pickler._batch_setitemscCs�|j}|j}|jdkr0|jtt|�f|d�dS|t�|j|�t|�}xXtt ||j ��}t |�}|dkr�|t �x|D] }||�qzW|t �||j krLdSqLWdS)Nr)r�r)r�r{r�r��setr�� EMPTY_SETr�r"rr#rtr�ADDITEMS)rr�r�r{r%Zbatchrz�itemrrr�save_setZs$     z_Pickler.save_setcCs�|j}|j}|jdkr0|jtt|�f|d�dS|t�x|D] }||�q>Wt|�|jkr�|t |j |jt|�d��dS|t �|j |�dS)Nr)r�r) r�r{r�r�� frozensetr�rr�r�rr�� FROZENSETr�)rr�r�r{r1rrr�save_frozensetrs    z_Pickler.save_frozensetc CsT|j}|j}|dkr t|dd�}|dkr.|j}t||�}y(t|dd�tj|}t||�\}}Wn,t t t fk r�t d|||f��YnX||k r�t d|||f��|j dk�rtj||f�} | �r| dkr�|ttd| ��n0| d k�r|ttd | ��n|ttd | ��dS|jd �d} ||k�r4| }|j d k�r^|j|�|j|�|t�n�||k �rz|jt|| f�n�|j dk�r�|tt|d�dt|d�d�n�|j�r�tj} tj} ||f| k�r�| ||f\}}n|| k�r�| |}y(|tt|d�dt|d�d�Wn*tk �rDt d|||j f��YnX|j|�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�zd?�Z7e7ee8d<d@dA�Z9e9ee:d<dBdC�Z;e;eed<dFdG�Z?e?ee@d<dHdI�ZAeAeeBd<dJdK�ZCeCeeDd<dLdM�ZEeEeeFd<dNdO�ZGeGeeHd<dPdQ�ZIeIeeJd<dRdS�ZKeKeeLd<dTdU�ZMeMeeNd<dVdW�ZOeOeePd<dXdY�ZQeQeeRd<dZd[�ZSd\d]�ZTeTeeUd<d^d_�ZVeVeeWd<d`da�ZXeXeeYd<dbdc�ZZeZee[d<ddde�Z\e\ee]d<dfdg�Z^e^ee_d<dhdi�Z`e`eead<djdk�Zbebeecd<dldm�Zdedeeed<dndo�Zfdpdq�Zgdrds�Zheheeid<dtdu�Zjejeekd<dvdw�Zleleemd<dxdy�Zneneeod<dzd{�Zpepeeqd<d|d}�Zrereesd<d~d�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�S)�� _UnpicklerT�ASCII�strict)r��encoding�errorscCs2|j|_|j|_i|_||_||_d|_||_dS)Nr) r��_file_readliner� _file_readr�rJrKr�r�)rr�r�rJrKrrrr�sz_Unpickler.__init__cCs�t|d�std|jjf��t|j|j�|_|jj|_|jj |_ g|_ g|_ |j j |_ d|_ |j}|j}y*x$|d�}|s|t�||d|�qlWWn"tk r�}z|jSd}~XnXdS)NrMz4Unpickler.__init__() was not called by %s.__init__()rr�)r�rr�rr|rMrL� _unframerrr�� metastack�stack�appendr�r��EOFErrorrr)rrr��keyZstopinstrrrrs(    z_Unpickler.loadcCs |j}|jj�|_|jj|_|S)N)rPrO�poprQ)rr�rrr�pop_marks  z_Unpickler.pop_markcCs td��dS)Nz%unsupported persistent id encountered)r)rr�rrr�persistent_load%sz_Unpickler.persistent_loadcCs<|jd�d}d|ko tkns2td|��||_dS)Nr�rzunsupported pickle protocol: %d)rr�r�r�)rr�rrr� load_proto*s z_Unpickler.load_protorcCs8td|jd��\}|tjkr(td|��|jj|�dS)Nz sys.maxsize: %d)r rr�r r�rNr�)rr�rrrr�1s  z_Unpickler.load_framec CsLy|j�dd�jd�}Wntk r6td��YnX|j|j|��dS)Nr�r�z2persistent IDs in protocol 0 must be ASCII stringsr�)r��decode�UnicodeDecodeErrorrrQrV)rr�rrr� load_persid8s  z_Unpickler.load_persidcCs|jj�}|j|j|��dS)N)rPrTrQrV)rr�rrr�load_binpersidAs z_Unpickler.load_binpersidcCs|jd�dS)N)rQ)rrrr� load_noneFsz_Unpickler.load_nonecCs|jd�dS)NF)rQ)rrrr� load_falseJsz_Unpickler.load_falsecCs|jd�dS)NT)rQ)rrrr� load_trueNsz_Unpickler.load_truecCsL|j�}|tdd�krd}n |tdd�kr4d}n t|d�}|j|�dS)Nr�FTr)r�r�r�r�rQ)rry�valrrr�load_intRs z_Unpickler.load_intcCs|jtd|jd��d�dS)Nztd|jd��\}|dkr"td��|j|�}|jt|��dS)NzdrXr)rQr r)rrrr� load_binfloat�sz_Unpickler.load_binfloatcCs"|jdkr|S|j|j|j�SdS)Nr)rJrYrK)rrrrr�_decode_string�s z_Unpickler._decode_stringcCsl|j�dd�}t|�dkrF|d|dkrF|ddkrF|dd�}ntd��|j|jtj|�d��dS) Nr�r�rs"'z)the STRING opcode argument must be quotedr�r�r�)r�rtrrQrkr � escape_decode)rryrrr� load_string�s (z_Unpickler.load_stringcCs@td|jd��\}|dkr"td��|j|�}|j|j|��dS)Nzsz(_Unpickler.load_dict..rr�)rU�rangertrQ)r�dr)r�r� load_dicts z_Unpickler.load_dictcCs�|st|t� st|d�rly ||�}Wqvtk rh}z&td|jt|�ftj�d��WYdd}~XqvXn |j|�}|j |�dS)NZ__getinitargs__zin constructor for %s: %sr�) r�r�r�r�rr�r��exc_infor�rQ)r�klassr�r�errrrr� _instantiates  0 z_Unpickler._instantiatecCsL|j�dd�jd�}|j�dd�jd�}|j||�}|j||j��dS)Nr�r�r�r�)r�rY� find_classr�rU)rr�r�r�rrr� load_insts z_Unpickler.load_instcCs"|j�}|jd�}|j||�dS)Nr)rUrTr�)rr�r�rrr�load_obj!s z_Unpickler.load_objcCs2|jj�}|jj�}|j|f|��}|j|�dS)N)rPrTr�rQ)rr�r�r�rrr� load_newobj(s  z_Unpickler.load_newobjcCs>|jj�}|jj�}|jj�}|j|f|�|�}|j|�dS)N)rPrTr�rQ)rr�r�r�r�rrr�load_newobj_ex/s    z_Unpickler.load_newobj_excCsF|j�dd�jd�}|j�dd�jd�}|j||�}|j|�dS)Nr�zutf-8r�r�)r�rYr�rQ)rr�r�r�rrr� load_global7s z_Unpickler.load_globalcCsJ|jj�}|jj�}t|�tk s,t|�tk r4td��|j|j||��dS)NzSTACK_GLOBAL requires str)rPrTr�r�rrQr�)rr�r�rrr�load_stack_global>s   z_Unpickler.load_stack_globalcCs|jd�d}|j|�dS)Nr�r)r� get_extension)rrArrr� load_ext1Fsz_Unpickler.load_ext1cCs td|jd��\}|j|�dS)Nzr�r:r�r;r�r<r�r�r�r�r�r�r�rr��DUPr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r!r�r$r�r*r�r+r�r0r�r�r�rr�r�rrrrrG�s$                                                                   rGT)r�cCst|||d�j|�dS)N)r�)r�r)r�r�r�r�rrr�_dumpsr�cCs(tj�}t|||d�j|�|j�}|S)N)r�)rkrlr�r�getvalue)r�r�r�rx�resrrr�_dumpssr�rHrI)r�rJrKcCst||||d�j�S)N)r�rJrK)rGr)r�r�rJrKrrr�_load sr�cCs0t|t�rtd��tj|�}t||||d�j�S)Nz%Can't load pickle from unicode string)r�rJrK)r�r�r�rkrlrGr)�sr�rJrKr�rrr�_loadss   r�) r r rrrrrrrcCsddl}|j�S)Nr)�doctestZtestmod)r�rrr�_test*sr�r�z$display contents of the pickle files)Z 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 run)N)N)��typesr�copyregrrrr� itertoolsr� functoolsrr�r Zstructr r rbrkr r@�__all__r� bytearrayZ bytes_typesZformat_versionZcompatible_formatsr�r�� Exceptionr r rrZorg.python.corer r8rr�r�rr�rr�r�r�rr�r�r�r�r�r�r�r�rrr!r�r?r(r'r$r�r�r�r�rrr�r�r�r�r*rrr+rr�r�r�r�r:r;r<r�r�r�r�r�r�rrr r rrr r/r0r4r�r>r�rur��dirrgr|r�r�r�r�r�rGr�r�r�r��_picklerrrrrrr�r�argparse�ArgumentParser�parser� add_argumentZFileType� parse_argsr�Ztestr�Z print_help�pprintrxr�rrrr�s,        $* -0