File: //lib64/python3.6/__pycache__/pickle.cpython-36.pyc
3
  \��  �               @   s  d Z ddlmZ ddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlZddlm
Z
 dd	lmZmZ ddlZddlZddlZddlZd
ddd
dddddg	ZeefZdZdddddddgZdZdZG dd
� d
e�ZG dd� de�ZG dd� de�Z G dd � d e�Z!ydd!l"m#Z# W n e$k
�r2   dZ#Y nX 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;d9Z<d:Z=d;Z>d<Z?d=Z@d>ZAd?ZBd@ZCdAZDdBZEdCZFdDZGdEZHdFZIdGZJdHZKdIZLdJZMdKZNdLZOdMZPdNZQdOZRdPZSdQZTdRZUdSZVdTZWdUZXdVZYdWZZdXZ[eKeUeVeWgZ\dYZ]dZZ^d[Z_d\Z`d]Zad^Zbd_Zcd`ZddaZedbZfdcZgddZhejidedf� ej� D �� G dgdh� dh�ZkG didj� dj�Zldkdl� Zmdmdn� Zndodp� Zodqdr� ZpG dsdt� dt�ZqG dudv� dv�Zrd�dwdx�dydz�Zsd�dwdx�d{d|�Ztdwd}d~d�d�d��Zudwd}d~d�d�d��Zvy0dd�lwmZmZm Z mxZxmyZymzZzm{Z{m|Z|m}Z} W n4 e$k
�rb   eqer ZxZyeseteuevf\ZzZ{Z|Z}Y nX d�d�� Z~ed�k�rddl�Z�e�j�d�d��Z�e�j�d�e�j�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�W dS )�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(string) -> 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�loadsz4.0z1.0z1.1z1.2z1.3z2.0z3.0�   �   c               @   s   e Zd ZdZdS )r   z6A common base class for the other pickling exceptions.N)�__name__�
__module__�__qualname__�__doc__� r   r   �/usr/lib64/python3.6/pickle.pyr   @   s   c               @   s   e Zd ZdZdS )r
   z]This exception is raised when an unpicklable object is passed to the
    dump() method.
    N)r   r   r   r   r   r   r   r   r
   D   s   c               @   s   e Zd ZdZdS )r   a  This 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.
    N)r   r   r   r   r   r   r   r   r   K   s   c               @   s   e Zd Zdd� ZdS )�_Stopc             C   s
   || _ d S )N)�value)�selfr   r   r   r   �__init__Y   s    z_Stop.__init__N)r   r   r   r    r   r   r   r   r   X   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 jd |�r|�qS )z[A-Z][A-Z0-9_]+$)�re�match)�.0�xr   r   r   �
<listcomp>�   s    rg   c               @   s:   e Zd ZdZdd� Zdd� Zdd� Zdd
d�Zdd
� ZdS )�_Framer�@   i   c             C   s   || _ d | _d S )N)�
file_write�
current_frame)r   rj   r   r   r   r    �   s    z_Framer.__init__c             C   s   t j� | _d S )N)�io�BytesIOrk   )r   r   r   r   �
start_framing�   s    z_Framer.start_framingc             C   s*   | j r&| j j� dkr&| jdd� d | _ d S )Nr   T)�force)rk   �tell�commit_frame)r   r   r   r   �end_framing�   s    z_Framer.end_framingFc             C   st   | j rp| j }|j� | jks|rp|j� �2}t|�}| j}|t� |td|�� ||� W d Q R X |jd� |j	�  d S )Nz<Qr   )
rk   rp   �_FRAME_SIZE_TARGET�	getbuffer�lenrj   �FRAMEr
   �seek�truncate)r   ro   �f�data�n�writer   r   r   rq   �   s    
z_Framer.commit_framec             C   s    | j r| j j|�S | j|�S d S )N)rk   r|   rj   )r   rz   r   r   r   r|   �   s    z
_Framer.writeNi   )F)	r   r   r   rs   r    rn   rr   rq   r|   r   r   r   r   rh   �   s   
rh   c               @   s.   e Zd Zd
dd�Zdd� Zdd� Zdd	� ZdS )�	_UnframerNc             C   s   || _ || _d | _d S )N)�	file_read�
file_readlinerk   )r   r~   r   Z	file_tellr   r   r   r    �   s    z_Unframer.__init__c             C   sV   | j rH| j j|�}| r0|dkr0d | _ | j|�S t|�|k rDtd��|S | j|�S d S )Nr   z$pickle exhausted before end of frame)rk   �readr~   ru   r   )r   r{   rz   r   r   r   r�   �   s    
z_Unframer.readc             C   sF   | j r:| j j� }|s"d | _ | j� S |d dkr6td��|S | j� S d S )N�   �   
r   z$pickle exhausted before end of frame����
   )rk   �readliner   r   )r   rz   r   r   r   r�   �   s    
z_Unframer.readlinec             C   s2   | j r| j j� dkrtd��tj| j|��| _ d S )N�    z4beginning of a new frame before end of current frame)rk   r�   r   rl   rm   r~   )r   �
frame_sizer   r   r   �
load_frame�   s    z_Unframer.load_frame)N)r   r   r   r    r�   r�   r�   r   r   r   r   r}   �   s   
r}   c             C   sl   xb|j d�D ]T}|dkr(tdj|| ���y| }t| |�} W q tk
r^   tdj|| ���Y qX qW | |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�parentr   r   r   �
_getattribute  s    
r�   c             C   sz   t | dd�}|dk	r|S x\ttjj� �D ]J\}}|dks(|dkrBq(yt||�d | krZ|S W q( tk
rp   Y q(X q(W dS )z$Find the module an object belong to.r   N�__main__r   )r�   �list�sys�modules�itemsr�   r�   )r�   r�   �module_name�moduler   r   r   �whichmodule  s    
r�   c             C   sh   | dkrdS | j � d? d }| j|ddd�}| dk rd|dkrd|d dkrd|d
 d
@ dkrd|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'
    >>>
    r   r�   r   r�   �littleT)�	byteorder�signed�   �   �   Nr�   ���r�   )�
bit_length�to_bytes)rf   �nbytes�resultr   r   r   �encode_long$  s    r�   c             C   s   t j| 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�   T)r�   r�   )�int�
from_bytes)rz   r   r   r   �decode_longB  s    r�   c               @   sh  e Zd Zd7dd�dd�Zdd� Zdd	� Zd
d� Zdd
� Zdd� Zd8dd�Z	dd� Z
dd� Zd9dd�Zi Z
dd� Zee
ed�<