B
    18\rO                 @   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Zd dlZddddgZd\Z	Z
ZZZd\ZZdd
dZdd ZG dd dZG dd dejZG dd dejZdddZdd Zdd Zedkre  dS )    NGzipFileopencompress
decompress)               )r   r   rb	   c             C   s   d|kr d|krPt d|f n0|d k	r0t d|d k	r@t d|d k	rPt d|dd}t| tttjfr|t| ||}n,t| dst| d	rtd ||| }nt	d
d|krt
||||S |S d S )NtbzInvalid mode: %rz0Argument 'encoding' not supported in binary modez.Argument 'errors' not supported in binary modez/Argument 'newline' not supported in binary mode readwritez1filename must be a str or bytes object, or a file)
ValueErrorreplace
isinstancestrbytesosPathLiker   hasattr	TypeErrorioTextIOWrapper)filenamemodecompresslevelencodingerrorsnewlineZgz_modebinary_file r$   H/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/gzip.pyr      s$    c             C   s   |  td| d S )Nz<L)r   structpack)outputvaluer$   r$   r%   write32u@   s    r*   c               @   s8   e Zd ZdddZdd ZdddZdd	 Zd
d ZdS )_PaddedFile    c             C   s    || _ t|| _|| _d| _d S )Nr   )_bufferlen_lengthfile_read)selffprependr$   r$   r%   __init__J   s    
z_PaddedFile.__init__c             C   s~   | j d kr| j|S | j | | jkrJ| j }|  j |7  _ | j|| j  S | j }d | _ | j|d  | j|| j |  S d S )N)r1   r0   r   r/   r-   )r2   sizer   r$   r$   r%   r   P   s    
z_PaddedFile.readc             C   s>   | j d kr|| _n|  j t|8  _ d S t| j| _d| _ d S )Nr   )r1   r-   r.   r/   )r2   r4   r$   r$   r%   r4   ]   s    
z_PaddedFile.prependc             C   s   d | _ d | _| j|S )N)r1   r-   r0   seek)r2   Zoffr$   r$   r%   r7   f   s    z_PaddedFile.seekc             C   s   dS )NTr$   )r2   r$   r$   r%   seekablek   s    z_PaddedFile.seekableN)r,   )r,   )__name__
__module____qualname__r5   r   r4   r7   r8   r$   r$   r$   r%   r+   E   s
   

	r+   c               @   s   e Zd ZdZd,ddZedd Zedd Zd	d
 Zdd Z	dd Z
dd Zd-ddZd.ddZdd Zedd Zdd ZejfddZdd Zd d! Zd"d# Zd$d% Zd&d' Zejfd(d)Zd/d*d+ZdS )0r   Nr   c             C   s2  |r"d|ksd|kr"t d||r6d|kr6|d7 }|d krTt||pJd }| _|d kr|t|dd}t|ttfsd}n
t	
|}|d krt|dd}|d	rt| _t|}t|| _|| _nN|d
rt| _| | t|tjtj tjd| _|| _nt d||| _| jtkr.|   d S )Nr   UzInvalid mode: {!r}r   r   namer   r   r)waxr   )r   formatbuiltinsr   	myfileobjgetattrr   r   r   r   fspath
startswithREADr   _GzipReaderr   BufferedReaderr-   r=   WRITE_init_writezlibcompressobjDEFLATED	MAX_WBITSDEF_MEM_LEVELr   _write_mtimefileobj_write_gzip_header)r2   r   r   r   rS   mtimerawr$   r$   r%   r5   {   s>    #


zGzipFile.__init__c             C   sB   dd l }|dtd | jtkr<| jdd  dkr<| jd S | jS )Nr   zuse the name attributer   z.gz)warningswarnDeprecationWarningr   rK   r=   )r2   rX   r$   r$   r%   r      s
    
zGzipFile.filenamec             C   s
   | j jjS )N)r-   rV   _last_mtime)r2   r$   r$   r%   rU      s    zGzipFile.mtimec             C   s.   t | j}d|dd  d tt|  d S )Nz<gzip r    >)reprrS   hexid)r2   sr$   r$   r%   __repr__   s    
zGzipFile.__repr__c             C   s.   || _ td| _d| _g | _d| _d| _d S )Nr,   r   )r=   rM   crc32crcr6   Zwritebufbufsizeoffset)r2   r   r$   r$   r%   rL      s    zGzipFile._init_writec             C   s   | j d | j d y<tj| j}t|ts<|d}|	drR|d d }W n t
k
rl   d}Y nX d}|rzt}| j t|d | j}|d krt }t| j t| | j d | j d	 |r| j |d
  d S )Ns      zlatin-1s   .gzrW   r,   r             )rS   r   r   pathbasenamer=   r   r   encodeendswithUnicodeEncodeErrorFNAMEchrrR   timer*   int)r2   ZfnameflagsrU   r$   r$   r%   rT      s,    



zGzipFile._write_gzip_headerc             C   s   |    | jtkr&dd l}t|jd| jd kr8tdt|t	rLt
|}nt|}|j}|dkr| j| j| |  j|7  _t|| j| _|  j|7  _|S )Nr   z$write() on read-only GzipFile objectz!write() on closed GzipFile object)_check_not_closedr   rK   errnoOSErrorEBADFrS   r   r   r   r.   
memoryviewnbytesr   r   r6   rM   rd   re   rg   )r2   datarw   lengthr$   r$   r%   r      s     



zGzipFile.writer\   c             C   s2   |    | jtkr&dd l}t|jd| j|S )Nr   z$read() on write-only GzipFile object)rv   r   rH   rw   rx   ry   r-   r   )r2   r6   rw   r$   r$   r%   r     s
    
zGzipFile.readc             C   s@   |    | jtkr&dd l}t|jd|dk r4tj}| j	|S )Nr   z%read1() on write-only GzipFile object)
rv   r   rH   rw   rx   ry   r   DEFAULT_BUFFER_SIZEr-   read1)r2   r6   rw   r$   r$   r%   r     s    
zGzipFile.read1c             C   s2   |    | jtkr&dd l}t|jd| j|S )Nr   z$peek() on write-only GzipFile object)rv   r   rH   rw   rx   ry   r-   peek)r2   nrw   r$   r$   r%   r   #  s
    
zGzipFile.peekc             C   s
   | j d kS )N)rS   )r2   r$   r$   r%   closed*  s    zGzipFile.closedc             C   s   | j }|d krd S d | _ zP| jtkrR|| j  t|| j t|| jd@  n| jt	krf| j
  W d | j}|rd | _|  X d S )Nl    )rS   r   rK   r   r   flushr*   re   r6   rH   r-   closerD   )r2   rS   rD   r$   r$   r%   r   .  s    

zGzipFile.closec             C   s4   |    | jtkr0| j| j| | j  d S )N)rv   r   rK   rS   r   r   r   )r2   Z	zlib_moder$   r$   r%   r   A  s    
zGzipFile.flushc             C   s
   | j  S )N)rS   fileno)r2   r$   r$   r%   r   H  s    zGzipFile.filenoc             C   s"   | j tkrtd| jd d S )NzCan't rewind in write moder   )r   rH   rx   r-   r7   )r2   r$   r$   r%   rewindP  s    
zGzipFile.rewindc             C   s
   | j tkS )N)r   rH   )r2   r$   r$   r%   readableW  s    zGzipFile.readablec             C   s
   | j tkS )N)r   rK   )r2   r$   r$   r%   writableZ  s    zGzipFile.writablec             C   s   dS )NTr$   )r2   r$   r$   r%   r8   ]  s    zGzipFile.seekablec             C   s   | j tkr|tjkr2|tjkr*| j| }ntd|| jk rDtd|| j }d}xt|d D ]}| 	| q`W | 	d|d   n | j t
kr|   | j||S | jS )NzSeek from end not supportedzNegative seek in write modes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   i   rk   )r   rK   r   SEEK_SETSEEK_CURrg   r   rx   ranger   rH   rv   r-   r7   )r2   rg   whencecountchunkir$   r$   r%   r7   `  s     





zGzipFile.seekc             C   s   |    | j|S )N)rv   r-   readline)r2   r6   r$   r$   r%   r   t  s    zGzipFile.readline)NNr   NN)r\   )r\   )r\   )r9   r:   r;   rD   r5   propertyr   rU   rc   rL   rT   r   r   r   r   r   r   rM   Z_SYNC_FLUSHr   r   r   r   r   r8   r   r   r7   r   r$   r$   r$   r%   r   n   s,    
H

c                   sZ   e Zd Z fddZdd Zdd Zdd Zdd
dZdd Zdd Z	 fddZ
  ZS )rI   c                s,   t  jt|tjtj d d| _d | _d S )N)ZwbitsT)superr5   r+   rM   decompressobjrP   _new_memberr[   )r2   fp)	__class__r$   r%   r5   z  s    z_GzipReader.__init__c             C   s   t d| _d| _d S )Nr,   r   )rM   rd   _crc_stream_size)r2   r$   r$   r%   
_init_read  s    z_GzipReader._init_readc             C   sJ   | j |}x8t||k rD| j |t| }|s:td||7 }qW |S )NzACompressed file ended before the end-of-stream marker was reached)_fpr   r.   EOFError)r2   r   r|   r   r$   r$   r%   _read_exact  s    z_GzipReader._read_exactc             C   s   | j d}|dkrdS |dkr,td| td| d\}}| _|dkrVtd|t@ r|td	| d\}| | |t@ rx| j d
}|r|dkrP qW |t	@ rx| j d
}|r|dkrP qW |t
@ r| d dS )Nr   r,   Fs   zNot a gzipped file (%r)z<BBIxxr	   zUnknown compression methodz<Hr   rk   T)r   r   rx   r&   unpackr   r[   FEXTRArq   FCOMMENTFHCRC)r2   magicmethodflagZ	extra_lenrb   r$   r$   r%   _read_gzip_header  s0    

z_GzipReader._read_gzip_headerr\   c             C   s   |dk r|   S |sdS x| jjr@|   d| _| jf | j| _| jrh|   |  sb| j	| _
dS d| _| jtj}| j||}| jjdkr| j| jj n| jjdkr| j| jj |dkrP |dkrtdqW | | |  j	t|7  _	|S )Nr   r,   TFzACompressed file ended before the end-of-stream marker was reached)readall_decompressoreof	_read_eofr   _decomp_factory_decomp_argsr   r   _pos_sizer   r   r   r~   r   unconsumed_tailr4   unused_datar   _add_read_datar.   )r2   r6   bufZ
uncompressr$   r$   r%   r     s:    

z_GzipReader.readc             C   s$   t || j| _| jt| | _d S )N)rM   rd   r   r   r.   )r2   r|   r$   r$   r%   r     s    z_GzipReader._add_read_datac             C   s   t d| d\}}|| jkr<tdt|t| jf n|| jd@ krRtdd}x|dkrn| jd}qXW |r| j	| d S )Nz<IIr	   zCRC check failed %s != %sl    z!Incorrect length of data producedrk   r   )
r&   r   r   r   rx   r`   r   r   r   r4   )r2   rd   Zisizecr$   r$   r%   r     s    


z_GzipReader._read_eofc                s   t    d| _d S )NT)r   _rewindr   )r2   )r   r$   r%   r     s    
z_GzipReader._rewind)r\   )r9   r:   r;   r5   r   r   r   r   r   r   r   __classcell__r$   r$   )r   r%   rI   y  s   !
3rI   c          	   C   s4   t  }t|d|d}||  W d Q R X | S )Nwb)rS   r   r   )r   BytesIOr   r   getvalue)r|   r   r   r3   r$   r$   r%   r     s    c          	   C   s$   t t| d
}| S Q R X d S )N)rS   )r   r   r   r   )r|   r3   r$   r$   r%   r     s    c              C   s:  t jdd  } | o| d dk}|r.| dd  } | s8dg} x| D ]}|r|dkrjtddt jjd}t jj}q|dd  d	krtd
t| q>t|d}t	|d d d}n>|dkrt jj}tddt jjd}nt	|d}t|d	 d}x|
d}|sP || qW |t jjk	r|  |t jjk	r>|  q>W d S )Nr   r   z-d-r   r   )r   r   rS   rW   z.gzzfilename doesn't end in .gz:r   i   )sysargvr   stdinbufferstdoutprintr_   r   rC   r   r   r   )argsr   argr3   gr   r$   r$   r%   _test  s<    



r   __main__)r   r   NNN)r   )r&   r   rs   r   rM   rC   r   _compression__all__ZFTEXTr   r   rq   r   rH   rK   r   r*   r+   
BaseStreamr   DecompressReaderrI   r   r   r   r9   r$   r$   r$   r%   <module>   s*     
+)   
	&