U
    d                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
 G dd deZG dd deZG dd dejZdd	d
Zedkrejejjej< e ee j dS )    N)AnyIOBinaryIOUnionc                   @   s0   e Zd Zdd Zdd Zdd Zedd Zd	S )

FakeObjectc                 C   s   || _ || _|| _d | _d S N)modulenameargsstate)selfr   r	   r
    r   ;/tmp/pip-unpacked-wheel-ua33x9lu/torch/utils/show_pickle.py__init__   s    zFakeObject.__init__c                 C   s8   | j d krdnd| j d}| j d| j | j| S )N z(state=).)r   r   r	   r
   )r   Z	state_strr   r   r   __repr__   s    zFakeObject.__repr__c                 C   s
   || _ d S r   )r   )r   r   r   r   r   __setstate__   s    zFakeObject.__setstate__c              	   C   s   |j s"|jd kr"|t| d S |jd krf||j d|j  | |j ||d |d || d S |j s||j d|j d || j7 }|d|  | |j|||d ||d  |d d S tdd S )Nr      z
()(state=
 r   zNeed to implement)	r
   r   writereprr   r	   _format_indent_per_level	Exception)printerobjstreamindent	allowancecontextlevelr   r   r   	pp_format   s    


zFakeObject.pp_formatN)__name__
__module____qualname__r   r   r   staticmethodr#   r   r   r   r   r      s
   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	FakeClassc                 C   s   || _ || _| j| _d S r   )r   r	   fake_new__new__r   r   r	   r   r   r   r   .   s    zFakeClass.__init__c                 C   s   | j  d| j S )Nr   )r   r	   )r   r   r   r   r   3   s    zFakeClass.__repr__c                 G   s   t | j| j|S r   r   r   r	   r   r
   r   r   r   __call__6   s    zFakeClass.__call__c                 G   s   t | j| j|dd  S )Nr   r,   r-   r   r   r   r)   9   s    zFakeClass.fake_newN)r$   r%   r&   r   r   r.   r)   r   r   r   r   r(   -   s   r(   c                       s`   e Zd Zdd fdd
Zdd Zdd Zeejj	Z	d	d
 Z
e
e	ejd < edd Z  ZS )DumpUnpicklerF)catch_invalid_utf8c                   s   t  j|f| || _d S r   )superr   r0   )r   filer0   kwargs	__class__r   r   r   >   s    zDumpUnpickler.__init__c                 C   s
   t ||S r   )r(   r+   r   r   r   
find_classG   s    zDumpUnpickler.find_classc                 C   s   t dd|fS )NZpersr   )r   )r   pidr   r   r   persistent_loadJ   s    zDumpUnpickler.persistent_loadc              
   C   s   t d| d\}|tjkr&td| |}zt|dd}W n< tk
r| } z| jsZ t	ddt|f}W 5 d }~X Y nX | 
| d S )Nz<I   zString too long.zutf-8surrogatepassbuiltinUnicodeDecodeError)structunpackreadsysmaxsizer   strr<   r0   r   append)r   ZstrlenZ	str_bytesr   Zexnr   r   r   load_binunicodeS   s    

$zDumpUnpickler.load_binunicoder   c                 C   s   | |  }tj||d |S )N)r   )loadpprint)clsZ	in_streamZ
out_streamvaluer   r   r   dumpb   s    zDumpUnpickler.dump)r$   r%   r&   r   r6   r8   dictpickle
_UnpicklerdispatchrD   
BINUNICODEclassmethodrI   __classcell__r   r   r4   r   r/   =   s   	r/   c           	      C   sd  t | dkrt|d k	rtdtjd tjd tjd tjd tjd tjd tjd	 dS | d
 }d|krt|d}t|| W 5 Q R X n|dd
\}}t	
|}d|kr||}t|| W 5 Q R X nfd}| D ]>}t|j|r||}t|| W 5 Q R X d} q<q|sVtd| d| W 5 Q R X d S )N   zPass argv of length 2.zusage: show_pickle PICKLE_FILE
z  PICKLE_FILE can be any of:
z    path to a pickle file
z    file.zip@member.pkl
z    file.zip@*/pattern.*
z'      (shell glob pattern for members)
z'      (only first match will be shown)
r   @rb*FTzCould not find member matching z in )lenr   r@   stderrr   openr/   rI   splitzipfileZipFileinfolistfnmatchfilename)	argvZoutput_streamfnamehandleZzfnameZmnamezffoundinfor   r   r   maini   s:    rd   __main__)N)r@   rK   r=   rF   rY   r\   typingr   r   r   r   objectr   r(   rL   r/   rd   r$   r#   PrettyPrinter	_dispatchr   exitr^   r   r   r   r   <module>   s   ",
%