a
    zel                    @   sv  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 ej	dv rTd dl
mZ ndZd dlZd dlmZmZmZmZ h dZee dree j ee j dZeZeed	pejjZeZd5ddZdd Zz
ejZW n e  y   eZY n0 G dd dZ!G dd dZ"z
ej#Z#W n& e yB   G dd de$e%Z#Y n0 G dd dej&dZ'ej'(e' G dd de'Z)ej)(e) d dl*m+Z+ e)(e+ G dd de'Z,ej,(e, G dd  d e,Z-G d!d" d"e,Z.G d#d$ d$e-Z/G d%d& d&e-Z0G d'd( d(e,Z1G d)d* d*e0e/Z2G d+d, d,e)Z+G d-d. d.e'Z3ej3(e3 G d/d0 d0ej4Z5G d1d2 d2e3Z6G d3d4 d4e6Z7dS )6    N)allocate_lock>   win32cygwin)setmode)__all__SEEK_SETSEEK_CURSEEK_END>   r         	SEEK_HOLEi    ZgettotalrefcountrTc              	   C   s  t | tst| } t | tttfs0td|  t |tsFtd| t |ts\td| |d urzt |tsztd| |d urt |tstd| t|}|td st|t|krt	d| d|v }	d|v }
d	|v }d
|v }d|v }d|v }d|v }d|v rD|	s"|s"|s"|r*t	ddd l
}|dtd d}
|rX|rXt	d|	|
 | | dkrvt	d|	s|
s|s|st	d|r|d urt	d|r|d urt	d|r|d urt	d|r|dkrdd l
}|dtd t| |	rdpd|
r"dp$d |r2d	p4d |rBd
pDd |rRdpTd ||d}|}z"d}|dks|dk r| rd}d}|dk rt}zt| j}W n ttfy   Y n0 |dkr|}|dk rt	d |dkr|r|W S t	d!|rt||}n<|	s0|s0|r<t||}n|
rNt||}nt	d"| |}|rj|W S t|||||}|}||_|W S    |   Y n0 d S )#Nzinvalid file: %rzinvalid mode: %rzinvalid buffering: %rinvalid encoding: %rinvalid errors: %rzaxrwb+tUxr   wa+tbUz4mode U cannot be combined with 'x', 'w', 'a', or '+'r   z'U' mode is deprecatedr   Tz'can't have text and binary mode at oncer
   z)can't have read/write/append mode at oncez/must have exactly one of read/write/append modez-binary mode doesn't take an encoding argumentz+binary mode doesn't take an errors argumentz+binary mode doesn't take a newline argumentzaline buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used )openerFr   zinvalid buffering sizezcan't have unbuffered text I/Ozunknown mode: %r)
isinstanceintosfspathstrbytes	TypeErrorsetlen
ValueErrorwarningswarnDeprecationWarningRuntimeWarningFileIOisattyDEFAULT_BUFFER_SIZEfstatfileno
st_blksizeOSErrorAttributeErrorBufferedRandomBufferedWriterBufferedReaderTextIOWrappermodeclose)filer4   	bufferingencodingerrorsnewlineclosefdr   ZmodesZcreatingreadingwritingZ	appendingZupdatingtextbinaryr$   rawresultline_bufferingbsbuffer rE   /usr/lib/python3.9/_pyio.pyopen+   s    {








rG   c                 C   s    dd l }|dtd t| dS )Nr   z(_pyio.open_code() may not be using hooksr   rb)r$   r%   r'   rG   )pathr$   rE   rE   rF   _open_code_with_warning  s
    rJ   c                   @   s   e Zd ZdddZdS )DocDescriptorNc                 C   s
   dt j S )Nz\open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)

)rG   __doc__)selfobjtyprE   rE   rF   __get__  s    zDocDescriptor.__get__)N)__name__
__module____qualname__rP   rE   rE   rE   rF   rK     s   rK   c                   @   s   e Zd Ze Zdd ZdS )OpenWrapperc                 O   s   t |i |S N)rG   )clsargskwargsrE   rE   rF   __new__.  s    zOpenWrapper.__new__N)rQ   rR   rS   rK   rL   rY   rE   rE   rE   rF   rT   $  s   rT   c                   @   s   e Zd ZdS )UnsupportedOperationN)rQ   rR   rS   rE   rE   rE   rF   rZ   7  s   rZ   c                   @   s   e Zd Zdd Zd5ddZdd Zd6d	d
Zdd ZdZdd Z	dd Z
dd Zd7ddZdd Zd8ddZdd Zd9ddZedd Zd:d d!Zd"d# Zd$d% Zd&d' Zd(d) Zd;d+d,Zd-d. Zd/d0 Zd<d1d2Zd3d4 ZdS )=IOBasec                 C   s   t d| jj|f d S )Nz%s.%s() not supported)rZ   	__class__rQ   )rM   namerE   rE   rF   _unsupported]  s    
zIOBase._unsupportedr   c                 C   s   |  d d S )Nseekr^   rM   poswhencerE   rE   rF   r_   d  s    zIOBase.seekc                 C   s   |  ddS Nr   r
   )r_   rM   rE   rE   rF   tellt  s    zIOBase.tellNc                 C   s   |  d d S Ntruncater`   rM   rb   rE   rE   rF   rh   x  s    zIOBase.truncatec                 C   s   |    d S rU   _checkClosedre   rE   rE   rF   flush  s    zIOBase.flushFc                 C   s&   | j s"z|   W d| _ nd| _ 0 d S )NT)_IOBase__closedrl   re   rE   rE   rF   r5     s    
zIOBase.closec                 C   sT   z
| j }W n ty   Y d S 0 |r(d S tr6|   nz|   W n   Y n0 d S rU   )closedr/   _IOBASE_EMITS_UNRAISABLEr5   )rM   rn   rE   rE   rF   __del__  s    

zIOBase.__del__c                 C   s   dS NFrE   re   rE   rE   rF   seekable  s    zIOBase.seekablec                 C   s    |   st|d u rdn|d S )NzFile or stream is not seekable.)rr   rZ   rM   msgrE   rE   rF   _checkSeekable  s    zIOBase._checkSeekablec                 C   s   dS rq   rE   re   rE   rE   rF   readable  s    zIOBase.readablec                 C   s    |   st|d u rdn|d S )NzFile or stream is not readable.)rv   rZ   rs   rE   rE   rF   _checkReadable  s    zIOBase._checkReadablec                 C   s   dS rq   rE   re   rE   rE   rF   writable  s    zIOBase.writablec                 C   s    |   st|d u rdn|d S )NzFile or stream is not writable.)rx   rZ   rs   rE   rE   rF   _checkWritable  s    zIOBase._checkWritablec                 C   s   | j S rU   )rm   re   rE   rE   rF   rn     s    zIOBase.closedc                 C   s   | j rt|d u rdn|d S NI/O operation on closed file.rn   r#   rs   rE   rE   rF   rk     s    zIOBase._checkClosedc                 C   s   |    | S rU   rj   re   rE   rE   rF   	__enter__  s    zIOBase.__enter__c                 G   s   |    d S rU   )r5   )rM   rW   rE   rE   rF   __exit__  s    zIOBase.__exit__c                 C   s   |  d d S )Nr,   r`   re   rE   rE   rF   r,     s    zIOBase.filenoc                 C   s   |    dS rq   rj   re   rE   rE   rF   r)     s    zIOBase.isattyr   c                    s   t  dr fdd}ndd }d u r0dn2z
j}W n  tyZ   tdY n0 | t }dk s|t|k r | }|sq||7 }|drhqqht|S )	Npeekc                     s>     d} | sdS | dd p&t| }dkr:t|}|S )Nr
      
r   )r   findr"   min)Z	readaheadnrM   sizerE   rF   
nreadahead  s    

z#IOBase.readline.<locals>.nreadaheadc                   S   s   dS Nr
   rE   rE   rE   rE   rF   r   !  s    r    is not an integerr   r   )	hasattr	__index__r/   r    	bytearrayr"   readendswithr   )rM   r   r   
size_indexresr   rE   r   rF   readline  s&    
	

zIOBase.readlinec                 C   s   |    | S rU   rj   re   rE   rE   rF   __iter__6  s    zIOBase.__iter__c                 C   s   |   }|st|S rU   )r   StopIterationrM   linerE   rE   rF   __next__:  s    zIOBase.__next__c                 C   sP   |d u s|dkrt | S d}g }| D ]&}|| |t|7 }||kr$ qLq$|S Nr   )listappendr"   )rM   hintr   linesr   rE   rE   rF   	readlines@  s    
zIOBase.readlinesc                 C   s    |    |D ]}| | qd S rU   )rk   write)rM   r   r   rE   rE   rF   
writelinesR  s    zIOBase.writelines)r   )N)N)N)N)N)r   )N)rQ   rR   rS   r^   r_   rf   rh   rl   rm   r5   rp   rr   ru   rv   rw   rx   ry   propertyrn   rk   r}   r~   r,   r)   r   r   r   r   r   rE   rE   rE   rF   r[   ;  s4   "







	

*
r[   )	metaclassc                   @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )	RawIOBaser   c                 C   sP   |d u rd}|dk r|   S t| }| |}|d u r>d S ||d = t|S )Nr   r   )readallr   r   readintor   )rM   r   r   r   rE   rE   rF   r   m  s    

zRawIOBase.readc                 C   s4   t  }| t}|sq ||7 }q|r,t|S |S d S rU   )r   r   r*   r   )rM   r   datarE   rE   rF   r   ~  s    

zRawIOBase.readallc                 C   s   |  d d S )Nr   r`   rM   r   rE   rE   rF   r     s    zRawIOBase.readintoc                 C   s   |  d d S Nr   r`   r   rE   rE   rF   r     s    zRawIOBase.writeN)r   )rQ   rR   rS   r   r   r   r   rE   rE   rE   rF   r   _  s   
r   )r(   c                   @   sH   e Zd ZdddZdddZdd Zdd	 Zd
d Zdd Zdd Z	dS )BufferedIOBaser   c                 C   s   |  d d S Nr   r`   r   rE   rE   rF   r     s    zBufferedIOBase.readc                 C   s   |  d d S )Nread1r`   r   rE   rE   rF   r     s    zBufferedIOBase.read1c                 C   s   | j |ddS )NFr   	_readintor   rE   rE   rF   r     s    zBufferedIOBase.readintoc                 C   s   | j |ddS )NTr   r   r   rE   rE   rF   	readinto1  s    	zBufferedIOBase.readinto1c                 C   sV   t |tst|}|d}|r0| t|}n| t|}t|}||d |< |S NB)r   
memoryviewcastr   r"   r   )rM   r   r   r   r   rE   rE   rF   r     s    

zBufferedIOBase._readintoc                 C   s   |  d d S r   r`   r   rE   rE   rF   r     s    	zBufferedIOBase.writec                 C   s   |  d d S Ndetachr`   re   rE   rE   rF   r     s    zBufferedIOBase.detachN)r   )r   )
rQ   rR   rS   r   r   r   r   r   r   r   rE   rE   rE   rF   r     s   

r   c                   @   s   e Zd Zdd Zd#ddZdd Zd$d	d
Zdd Zdd Zdd Z	dd Z
edd Zedd Zedd Zedd Zdd Zdd Zdd  Zd!d" ZdS )%_BufferedIOMixinc                 C   s
   || _ d S rU   _rawrM   r@   rE   rE   rF   __init__  s    z_BufferedIOMixin.__init__r   c                 C   s"   | j ||}|dk rtd|S )Nr   z#seek() returned an invalid position)r@   r_   r.   )rM   rb   rc   Znew_positionrE   rE   rF   r_     s    z_BufferedIOMixin.seekc                 C   s   | j  }|dk rtd|S )Nr   z#tell() returned an invalid position)r@   rf   r.   ri   rE   rE   rF   rf     s    
z_BufferedIOMixin.tellNc                 C   s4   |    |   |   |d u r(|  }| j|S rU   )rk   ry   rl   rf   r@   rh   ri   rE   rE   rF   rh   %  s    z_BufferedIOMixin.truncatec                 C   s   | j rtd| j  d S )Nflush on closed file)rn   r#   r@   rl   re   rE   rE   rF   rl   6  s    z_BufferedIOMixin.flushc                 C   s8   | j d ur4| js4z|   W | j   n| j   0 d S rU   )r@   rn   rl   r5   re   rE   rE   rF   r5   ;  s    
z_BufferedIOMixin.closec                 C   s*   | j d u rtd|   | j}d | _|S )Nzraw stream already detached)r@   r#   rl   r   r   rE   rE   rF   r   C  s    
z_BufferedIOMixin.detachc                 C   s
   | j  S rU   )r@   rr   re   rE   rE   rF   rr   M  s    z_BufferedIOMixin.seekablec                 C   s   | j S rU   r   re   rE   rE   rF   r@   P  s    z_BufferedIOMixin.rawc                 C   s   | j jS rU   )r@   rn   re   rE   rE   rF   rn   T  s    z_BufferedIOMixin.closedc                 C   s   | j jS rU   )r@   r]   re   rE   rE   rF   r]   X  s    z_BufferedIOMixin.namec                 C   s   | j jS rU   )r@   r4   re   rE   rE   rF   r4   \  s    z_BufferedIOMixin.modec                 C   s   t d| jjdd S Nzcannot pickle z objectr    r\   rQ   re   rE   rE   rF   __getstate__`  s    z_BufferedIOMixin.__getstate__c                 C   sL   | j j}| j j}z
| j}W n ty8   d|| Y S 0 d|||S d S )Nz<{}.{}>z<{}.{} name={!r}>)r\   rR   rS   r]   r/   format)rM   modnameZclsnamer]   rE   rE   rF   __repr__c  s    
z_BufferedIOMixin.__repr__c                 C   s
   | j  S rU   )r@   r,   re   rE   rE   rF   r,   o  s    z_BufferedIOMixin.filenoc                 C   s
   | j  S rU   )r@   r)   re   rE   rE   rF   r)   r  s    z_BufferedIOMixin.isatty)r   )N)rQ   rR   rS   r   r_   rf   rh   rl   r5   r   rr   r   r@   rn   r]   r4   r   r   r,   r)   rE   rE   rE   rF   r     s(   	






r   c                       s   e Zd ZdZd ddZdd Zdd Zdd	 Z fd
dZd!ddZ	d"ddZ
dd Zd#ddZdd Zd$ddZdd Zdd Zdd Z  ZS )%BytesIONc                 C   s&   t  }|d ur||7 }|| _d| _d S r   )r   _buffer_pos)rM   Zinitial_bytesbufrE   rE   rF   r   ~  s
    zBytesIO.__init__c                 C   s   | j rtd| j S )Nz__getstate__ on closed file)rn   r#   __dict__copyre   rE   rE   rF   r     s    zBytesIO.__getstate__c                 C   s   | j rtdt| jS )Nzgetvalue on closed file)rn   r#   r   r   re   rE   rE   rF   getvalue  s    zBytesIO.getvaluec                 C   s   | j rtdt| jS )Nzgetbuffer on closed file)rn   r#   r   r   re   rE   rE   rF   	getbuffer  s    zBytesIO.getbufferc                    s"   | j d ur| j   t   d S rU   )r   clearsuperr5   re   r\   rE   rF   r5     s    

zBytesIO.closer   c                 C   s   | j rtd|d u rd}n2z
|j}W n  tyF   t|dY n0 | }|dk r`t| j}t| j| jkrtdS tt| j| j| }| j| j| }|| _t	|S )Nread from closed filer   r   r       )
rn   r#   r   r/   r    r"   r   r   r   r   )rM   r   r   Znewposr   rE   rE   rF   r     s"    

zBytesIO.readc                 C   s
   |  |S rU   )r   r   rE   rE   rF   r     s    zBytesIO.read1c                 C   s   | j rtdt|tr tdt|}|j}W d    n1 sD0    Y  |dkrZdS | j}|t| j	krd|t| j	  }|  j	|7  _	|| j	||| < |  j|7  _|S )Nwrite to closed file can't write str to binary streamr       )
rn   r#   r   r   r    r   nbytesr   r"   r   )rM   r   viewr   rb   ZpaddingrE   rE   rF   r     s    

$zBytesIO.writer   c                 C   s   | j rtdz
|j}W n  ty8   t|dY n0 | }|dkrf|dk r^td|f || _nD|dkrtd| j| | _n(|dkrtdt| j| | _ntd| jS )Nzseek on closed filer   r   negative seek position %rr
   r   zunsupported whence value)	rn   r#   r   r/   r    r   maxr"   r   )rM   rb   rc   	pos_indexrE   rE   rF   r_     s"    
zBytesIO.seekc                 C   s   | j rtd| jS )Ntell on closed file)rn   r#   r   re   rE   rE   rF   rf     s    zBytesIO.tellc                 C   sv   | j rtd|d u r| j}nHz
|j}W n  tyH   t|dY n0 | }|dk rftd|f | j|d = |S )Nztruncate on closed filer   r   znegative truncate position %r)rn   r#   r   r   r/   r    r   )rM   rb   r   rE   rE   rF   rh     s    
zBytesIO.truncatec                 C   s   | j rtddS Nr{   Tr|   re   rE   rE   rF   rv     s    zBytesIO.readablec                 C   s   | j rtddS r   r|   re   rE   rE   rF   rx     s    zBytesIO.writablec                 C   s   | j rtddS r   r|   re   rE   rE   rF   rr     s    zBytesIO.seekable)N)r   )r   )r   )N)rQ   rR   rS   r   r   r   r   r   r5   r   r   r   r_   rf   rh   rv   rx   rr   __classcell__rE   rE   r   rF   r   v  s   




r   c                   @   st   e Zd ZefddZdd Zdd Zddd	Zdd
dZdddZ	dddZ
dddZdd Zdd ZdddZdS ) r2   c                 C   sF   |  stdt| | |dkr,td|| _|   t | _d S )Nz "raw" argument must be readable.r   invalid buffer size)	rv   r.   r   r   r#   buffer_size_reset_read_bufLock
_read_lockrM   r@   r   rE   rE   rF   r     s    zBufferedReader.__init__c                 C   s
   | j  S rU   )r@   rv   re   rE   rE   rF   rv     s    zBufferedReader.readablec                 C   s   d| _ d| _d S )Nr   r   )	_read_buf	_read_posre   rE   rE   rF   r      s    zBufferedReader._reset_read_bufNc                 C   sL   |d ur|dk rt d| j | |W  d    S 1 s>0    Y  d S )Nr   zinvalid number of bytes to read)r#   r   _read_unlockedr   rE   rE   rF   r   $  s    zBufferedReader.readc                 C   s  d}d}| j }| j}|d u s$|dkr|   t| jdrj| j }|d u rZ||d  pXd S ||d  | S ||d  g}d}| j }||v r|}q|t|7 }|| q|d	|p|S t|| }	||	kr|  j|7  _||||  S ||d  g}t
| j|}
|	|k rH| j|
}||v r.|}qH|	t|7 }	|| qt||	}d	|}||d  | _ d| _|r|d | S |S )Nr   )r   Nr   r   r   )r   r   r   r   r@   r   r   r"   r   joinr   r   r   )rM   r   Z
nodata_valZempty_valuesr   rb   chunkchunksZcurrent_sizeavailZwantedoutrE   rE   rF   r   1  sL    





zBufferedReader._read_unlockedr   c                 C   s4   | j  | |W  d    S 1 s&0    Y  d S rU   )r   _peek_unlockedr   rE   rE   rF   r   e  s    zBufferedReader.peekc                 C   sr   t || j}t| j| j }||k s,|dkrb| j| }| j|}|rb| j| jd  | | _d| _| j| jd  S r   )r   r   r"   r   r   r@   r   )rM   r   ZwantZhaveZto_readcurrentrE   rE   rF   r   o  s    
zBufferedReader._peek_unlockedr   c                 C   sj   |dk r| j }|dkrdS | j6 | d | t|t| j| j W  d    S 1 s\0    Y  d S )Nr   r   r
   )r   r   r   r   r   r"   r   r   r   rE   rE   rF   r   z  s    
zBufferedReader.read1c                 C   s   t |tst|}|jdkr dS |d}d}| j |t|k rtt| j| j t|}|r| j| j| j|  |||| < |  j|7  _||7 }|t|krqt|| | j	kr| j
||d  }|sq||7 }n|r|s| dsq|r6|r6qq6W d    n1 s0    Y  |S )Nr   r   r
   )r   r   r   r   r   r"   r   r   r   r   r@   r   r   )rM   r   r   writtenr   r   rE   rE   rF   r     s6    




$zBufferedReader._readintoc                 C   s   t | t| j | j S rU   )r   rf   r"   r   r   re   rE   rE   rF   rf     s    zBufferedReader.tellc                 C   sp   |t vrtd| jF |dkr4|t| j| j 8 }t| ||}|   |W  d    S 1 sb0    Y  d S )Ninvalid whence valuer
   )	valid_seek_flagsr#   r   r"   r   r   r   r_   r   ra   rE   rE   rF   r_     s    zBufferedReader.seek)N)N)r   )r   )r   )r   )rQ   rR   rS   r*   r   rv   r   r   r   r   r   r   r   rf   r_   rE   rE   rE   rF   r2     s   

4



.r2   c                   @   s\   e Zd ZefddZdd Zdd Zddd	Zd
d Zdd Z	dd Z
dddZdd ZdS )r1   c                 C   sF   |  stdt| | |dkr,td|| _t | _t | _	d S )Nz "raw" argument must be writable.r   r   )
rx   r.   r   r   r#   r   r   
_write_bufr   _write_lockr   rE   rE   rF   r     s    zBufferedWriter.__init__c                 C   s
   | j  S rU   )r@   rx   re   rE   rE   rF   rx     s    zBufferedWriter.writablec                 C   s  t |trtd| j | jr(tdt| j| jkr@| 	  t| j}| j
| t| j| }t| j| jkrz| 	  W nn ty } zVt| j| jkrt| j| j }||8 }| jd | j | _t|j|j|W Y d }~n
d }~0 0 |W  d    S 1 s
0    Y  d S )Nr   r   )r   r   r    r   rn   r#   r"   r   r   _flush_unlockedextendBlockingIOErrorerrnostrerror)rM   r   beforer   eZoveragerE   rE   rF   r     s(    

&zBufferedWriter.writeNc                 C   sP   | j 6 |   |d u r"| j }| j|W  d    S 1 sB0    Y  d S rU   )r   r   r@   rf   rh   ri   rE   rE   rF   rh     s
    
zBufferedWriter.truncatec                 C   s2   | j  |   W d    n1 s$0    Y  d S rU   )r   r   re   rE   rE   rF   rl     s    zBufferedWriter.flushc                 C   s   | j rtd| jrz| j| j}W n ty@   tdY n0 |d u rXttjdd|t	| jksn|dk rvt
d| jd |= qd S )Nr   zHself.raw should implement RawIOBase: it should not raise BlockingIOErrorz)write could not complete without blockingr   z*write() returned incorrect number of bytes)rn   r#   r   r@   r   r   RuntimeErrorr   EAGAINr"   r.   rM   r   rE   rE   rF   r     s    zBufferedWriter._flush_unlockedc                 C   s   t | t| j S rU   )r   rf   r"   r   re   rE   rE   rF   rf     s    zBufferedWriter.tellr   c                 C   sP   |t vrtd| j& |   t| ||W  d    S 1 sB0    Y  d S )Nr   )r   r#   r   r   r   r_   ra   rE   rE   rF   r_     s
    zBufferedWriter.seekc                 C   s   | j 0 | jd u s| jr(W d    d S W d    n1 s<0    Y  z<|   W | j  | j  W d    q1 sx0    Y  n2| j  | j  W d    n1 s0    Y  0 d S rU   )r   r@   rn   rl   r5   re   rE   rE   rF   r5      s    .
*zBufferedWriter.close)N)r   )rQ   rR   rS   r*   r   rx   r   rh   rl   r   rf   r_   r5   rE   rE   rE   rF   r1     s   	

r1   c                   @   s   e Zd ZefddZdddZdd Zdd	 ZdddZd ddZ	dd Z
dd Zdd Zdd Zdd Zdd Zedd ZdS )!BufferedRWPairc                 C   s<   |  std| s tdt||| _t||| _d S )Nz#"reader" argument must be readable.z#"writer" argument must be writable.)rv   r.   rx   r2   readerr1   writer)rM   r   r   r   rE   rE   rF   r   @  s    zBufferedRWPair.__init__r   c                 C   s   |d u rd}| j |S Nr   )r   r   r   rE   rE   rF   r   N  s    zBufferedRWPair.readc                 C   s   | j |S rU   )r   r   r   rE   rE   rF   r   S  s    zBufferedRWPair.readintoc                 C   s   | j |S rU   )r   r   r   rE   rE   rF   r   V  s    zBufferedRWPair.writer   c                 C   s   | j |S rU   )r   r   r   rE   rE   rF   r   Y  s    zBufferedRWPair.peekc                 C   s   | j |S rU   )r   r   r   rE   rE   rF   r   \  s    zBufferedRWPair.read1c                 C   s   | j |S rU   )r   r   r   rE   rE   rF   r   _  s    zBufferedRWPair.readinto1c                 C   s
   | j  S rU   )r   rv   re   rE   rE   rF   rv   b  s    zBufferedRWPair.readablec                 C   s
   | j  S rU   )r   rx   re   rE   rE   rF   rx   e  s    zBufferedRWPair.writablec                 C   s
   | j  S rU   )r   rl   re   rE   rE   rF   rl   h  s    zBufferedRWPair.flushc                 C   s*   z| j   W | j  n| j  0 d S rU   )r   r5   r   re   rE   rE   rF   r5   k  s    zBufferedRWPair.closec                 C   s   | j  p| j S rU   )r   r)   r   re   rE   rE   rF   r)   q  s    zBufferedRWPair.isattyc                 C   s   | j jS rU   )r   rn   re   rE   rE   rF   rn   t  s    zBufferedRWPair.closedN)r   )r   )r   )rQ   rR   rS   r*   r   r   r   r   r   r   r   rv   rx   rl   r5   r)   r   rn   rE   rE   rE   rF   r   0  s   


r   c                   @   sj   e Zd ZefddZdddZdd Zdd	d
ZdddZdd Z	dddZ
dddZdd Zdd ZdS )r0   c                 C   s(   |   t| || t| || d S rU   )ru   r2   r   r1   r   rE   rE   rF   r     s    zBufferedRandom.__init__r   c                 C   s   |t vrtd|   | jr^| j* | j| jt| j d W d    n1 sT0    Y  | j||}| j | 	  W d    n1 s0    Y  |dk rt
d|S )Nr   r
   r   z seek() returned invalid position)r   r#   rl   r   r   r@   r_   r   r"   r   r.   ra   rE   rE   rF   r_     s    8&zBufferedRandom.seekc                 C   s   | j rt| S t| S d S rU   )r   r1   rf   r2   re   rE   rE   rF   rf     s    
zBufferedRandom.tellNc                 C   s   |d u r|   }t| |S rU   )rf   r1   rh   ri   rE   rE   rF   rh     s    zBufferedRandom.truncatec                 C   s    |d u rd}|    t| |S r   )rl   r2   r   r   rE   rE   rF   r     s    zBufferedRandom.readc                 C   s   |    t| |S rU   )rl   r2   r   r   rE   rE   rF   r     s    zBufferedRandom.readintoc                 C   s   |    t| |S rU   )rl   r2   r   r   rE   rE   rF   r     s    zBufferedRandom.peekr   c                 C   s   |    t| |S rU   )rl   r2   r   r   rE   rE   rF   r     s    zBufferedRandom.read1c                 C   s   |    t| |S rU   )rl   r2   r   r   rE   rE   rF   r     s    zBufferedRandom.readinto1c                 C   sZ   | j rN| j2 | j| jt| j  d |   W d    n1 sD0    Y  t| |S r   )	r   r   r@   r_   r   r"   r   r1   r   r   rE   rE   rF   r     s
    &zBufferedRandom.write)r   )N)N)r   )r   )rQ   rR   rS   r*   r   r_   rf   rh   r   r   r   r   r   r   rE   rE   rE   rF   r0   y  s   	




r0   c                       s   e Zd ZdZdZdZdZdZdZdZ	d0ddZ
dd	 Zd
d Zdd Zdd Zd1ddZd2ddZdd Zdd Zdd ZefddZdd Zd3ddZ fd d!Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zed,d- Zed.d/ Z   Z!S )4r(   r   FNTr   c              
   C   sH  | j dkr0z| jrt| j  W d| _ nd| _ 0 t|trBtdt|trb|}|dk rftdnd}t|t	s~td|f t
|t
dkstd|f tdd |D d	ks|d
d	krtdd|v rd| _d| _tjtjB }nTd|v rd| _d}n@d|v rd| _tjtjB }n"d|v r>d| _d| _tjtjB }d
|v rTd| _d| _| jrp| jrp|tjO }n| jr|tjO }n
|tjO }|ttddO }ttddpttdd}||O }d }zT|dk r@|std|d u rt||d}n0|||}t|tstd|dk r*td|}|s@t|d || _t|}	z(t|	jrvt t!j"t#t!j"|W n t$y   Y n0 t|	dd| _%| j%d	krt&| _%t'rt'|tj( || _)| jrzt*|dt+ W n6 ty }
 z|
j!t!j,kr W Y d }
~
n
d }
~
0 0 W n"   |d ur6t|  Y n0 || _ d S )Nr   r   z$integer argument expected, got floatznegative file descriptorzinvalid mode: %szxrwab+c                 s   s   | ]}|d v V  qdS )ZrwaxNrE   ).0crE   rE   rF   	<genexpr>  r   z"FileIO.__init__.<locals>.<genexpr>r
   r   zKMust have exactly one of create/read/write/append mode and at most one plusr   Tr   r   r   O_BINARYZO_NOINHERIT	O_CLOEXECz'Cannot use closefd=False with file namei  zexpected integer from openerzNegative file descriptorFr-   )-_fd_closefdr   r5   r   floatr    r   r#   r   r!   sumcount_created	_writableO_EXCLO_CREAT	_readableO_TRUNC
_appendingO_APPENDO_RDWRO_RDONLYO_WRONLYgetattrrG   r.   set_inheritabler+   statS_ISDIRst_modeIsADirectoryErrorr   ZEISDIRr   r/   _blksizer*   _setmoder   r]   lseekr	   ZESPIPE)rM   r6   r4   r;   r   fdflagsZnoinherit_flagZowned_fdZfdfstatr   rE   rE   rF   r     s    




$











zFileIO.__init__c                 C   sB   | j dkr>| jr>| js>dd l}|jd| f td| d |   d S )Nr   zunclosed file %rr   )
stacklevelsource)r   r   rn   r$   r%   ResourceWarningr5   )rM   r$   rE   rE   rF   rp   E  s    zFileIO.__del__c                 C   s   t d| jjdd S r   r   re   rE   rE   rF   r   L  s    zFileIO.__getstate__c                 C   sn   d| j j| j jf }| jr"d| S z
| j}W n( tyT   d|| j| j| jf  Y S 0 d||| j| jf S d S )Nz%s.%sz<%s [closed]>z<%s fd=%d mode=%r closefd=%r>z<%s name=%r mode=%r closefd=%r>)	r\   rR   rS   rn   r]   r/   r   r4   r   )rM   
class_namer]   rE   rE   rF   r   O  s    

zFileIO.__repr__c                 C   s   | j stdd S )NzFile not open for reading)r  rZ   re   rE   rE   rF   rw   ]  s    zFileIO._checkReadablec                 C   s   | j stdd S )NzFile not open for writing)r  rZ   rs   rE   rE   rF   ry   a  s    zFileIO._checkWritablec                 C   sR   |    |   |d u s |dk r(|  S zt| j|W S  tyL   Y d S 0 d S r   )rk   rw   r   r   r   r   r   r   rE   rE   rF   r   e  s    zFileIO.readc                 C   s   |    |   t}z6t| jdt}t| jj}||krH|| d }W n t	y\   Y n0 t
 }t||krt|}|t|t7 }|t| }zt| j|}W n ty   |rY qY d S 0 |sq||7 }qdt|S rd   )rk   rw   r*   r   r  r   r   r+   st_sizer.   r   r"   r   r   r   r   )rM   bufsizerb   endrA   r   r   rE   rE   rF   r   u  s2    
zFileIO.readallc                 C   s4   t |d}| t|}t|}||d |< |S r   )r   r   r   r"   )rM   r   mr   r   rE   rE   rF   r     s
    zFileIO.readintoc                 C   s:   |    |   zt| j|W S  ty4   Y d S 0 d S rU   )rk   ry   r   r   r   r   r   rE   rE   rF   r     s    zFileIO.writec                 C   s*   t |trtd|   t| j||S )Nzan integer is required)r   r  r    rk   r   r  r   ra   rE   rE   rF   r_     s    
zFileIO.seekc                 C   s   |    t| jdtS r   )rk   r   r  r   r   re   rE   rE   rF   rf     s    zFileIO.tellc                 C   s2   |    |   |d u r |  }t| j| |S rU   )rk   ry   rf   r   	ftruncater   r   rE   rE   rF   rh     s    zFileIO.truncatec                    s8   | j s4z | jrt| j W t   nt   0 d S rU   )rn   r   r   r5   r   r   re   r   rE   rF   r5     s
    zFileIO.closec                 C   sD   |    | jd u r>z|   W n ty6   d| _Y n0 d| _| jS )NFT)rk   	_seekablerf   r.   re   rE   rE   rF   rr     s    
zFileIO.seekablec                 C   s   |    | jS rU   )rk   r  re   rE   rE   rF   rv     s    zFileIO.readablec                 C   s   |    | jS rU   )rk   r  re   rE   rE   rF   rx     s    zFileIO.writablec                 C   s   |    | jS rU   )rk   r   re   rE   rE   rF   r,     s    zFileIO.filenoc                 C   s   |    t| jS rU   )rk   r   r)   r   re   rE   rE   rF   r)     s    zFileIO.isattyc                 C   s   | j S rU   )r   re   rE   rE   rF   r;     s    zFileIO.closefdc                 C   sJ   | j r| jrdS dS n0| jr,| jr&dS dS n| jrB| jr<dS dS ndS d S )Nzxb+xbzab+abzrb+rH   wb)r  r  r
  r  re   rE   rE   rF   r4     s    zFileIO.mode)r   TN)N)N)N)"rQ   rR   rS   r   r  r  r  r
  r#  r   r   rp   r   r   rw   ry   r   r   r   r   r   r_   rf   rh   r5   rr   rv   rx   r,   r)   r   r;   r4   r   rE   rE   r   rF   r(     s<   
y

#

r(   c                   @   s\   e Zd ZdddZdd ZdddZd	d
 Zdd Zedd Z	edd Z
edd ZdS )
TextIOBaser   c                 C   s   |  d d S r   r`   r   rE   rE   rF   r   "  s    zTextIOBase.readc                 C   s   |  d d S r   r`   )rM   srE   rE   rF   r   ,  s    zTextIOBase.writeNc                 C   s   |  d d S rg   r`   ri   rE   rE   rF   rh   0  s    zTextIOBase.truncatec                 C   s   |  d d S )Nr   r`   re   rE   rE   rF   r   4  s    zTextIOBase.readlinec                 C   s   |  d d S r   r`   re   rE   rE   rF   r   ;  s    zTextIOBase.detachc                 C   s   d S rU   rE   re   rE   rE   rF   r8   D  s    zTextIOBase.encodingc                 C   s   d S rU   rE   re   rE   rE   rF   newlinesI  s    zTextIOBase.newlinesc                 C   s   d S rU   rE   re   rE   rE   rF   r9   S  s    zTextIOBase.errors)r   )N)rQ   rR   rS   r   r   rh   r   r   r   r8   r)  r9   rE   rE   rE   rF   r'    s   


	

	r'  c                   @   sP   e Zd ZdddZdddZdd Zd	d
 Zdd ZdZdZ	dZ
edd ZdS )IncrementalNewlineDecoderstrictc                 C   s,   t jj| |d || _|| _d| _d| _d S )N)r9   r   F)codecsIncrementalDecoderr   	translatedecoderseennl	pendingcr)rM   r/  r.  r9   rE   rE   rF   r   d  s
    z"IncrementalNewlineDecoder.__init__Fc                 C   s   | j d u r|}n| j j||d}| jr<|s.|r<d| }d| _|dr\|s\|d d }d| _|d}|d| }|d| }|  j|o| j|o| jB |o| jB O  _| j	r|r|
dd}|r|
dd}|S )NfinalFr   T

)r/  decoder1  r   r  r0  _LF_CR_CRLFr.  replace)rM   inputr3  outputZcrlfZcrZlfrE   rE   rF   r7  k  s*    

z IncrementalNewlineDecoder.decodec                 C   s@   | j d u rd}d}n| j  \}}|dK }| jr8|dO }||fS )Nr   r   r
   )r/  getstater1  )rM   r   flagrE   rE   rF   r>    s    
z"IncrementalNewlineDecoder.getstatec                 C   s8   |\}}t |d@ | _| jd ur4| j||d? f d S r   )boolr1  r/  setstate)rM   stater   r?  rE   rE   rF   rA    s    
z"IncrementalNewlineDecoder.setstatec                 C   s$   d| _ d| _| jd ur | j  d S )Nr   F)r0  r1  r/  resetre   rE   rE   rF   rC    s    
zIncrementalNewlineDecoder.resetr
   r      c                 C   s
   d| j  S )N)Nr6  r4  )r4  r6  r5  )r6  r5  )r4  r5  )r4  r6  r5  )r0  re   rE   rE   rF   r)    s    z"IncrementalNewlineDecoder.newlinesN)r+  )F)rQ   rR   rS   r   r7  r>  rA  rC  r8  r9  r:  r   r)  rE   rE   rE   rF   r*  ]  s   

r*  c                   @   sr  e Zd ZdZdZdNddZdd ZdOdd	Zd
d Ze	dd Z
e	dd Ze	dd Ze	dd Ze	dd ZddedddddZdd Zdd Zdd Zdd  Zd!d" Ze	d#d$ Ze	d%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 ZdPd3d4Zd5d6 Zd7d8 Z dQd:d;Z!d<d= Z"d>d? Z#dRd@dAZ$dBdC Z%dSdDdEZ&dTdFdGZ'dHdI Z(dUdJdKZ)e	dLdM Z*dS )Vr3   i   NFc           	   	   C   s$  |  | |d u rrzt| }W n ttfy:   Y n0 |d u rrzdd l}W n tyf   d}Y n0 |d}t	|t
std| t|jsd}t|| |d u rd}n$t	|t
std| trt| || _d| _d| _d | _| j  | _| _t| jd	| _| ||||| d S )
Nr   asciiFr   zG%r is not a text encoding; use codecs.open() to handle arbitrary codecsr+  r   r   r   )_check_newliner   device_encodingr,   r/   rZ   localeImportErrorgetpreferredencodingr   r   r#   r,  lookup_is_text_encodingLookupError_CHECK_ERRORSlookup_errorr   _decoded_chars_decoded_chars_used	_snapshotrD   rr   r#  _tellingr   
_has_read1
_configure)	rM   rD   r8   r9   r:   rB   write_throughrH  rt   rE   rE   rF   r     s@    






zTextIOWrapper.__init__c                 C   s>   |d ur$t |ts$tdt|f |dvr:td|f d S )Nzillegal newline type: %r)Nr   r6  r4  r5  zillegal newline value: %r)r   r   r    typer#   )rM   r:   rE   rE   rF   rF    s    zTextIOWrapper._check_newlinec                 C   s   || _ || _d | _d | _d| _| | _|d u | _|| _|dk| _|pHt	j
| _|| _|| _| jr|  r| j }|dkrz|  d W n ty   Y n0 d S )N        r   r   )	_encoding_errors_encoder_decoder	_b2cratio_readuniversal_readtranslate_readnl_writetranslater   linesep_writenl_line_buffering_write_throughr#  rx   rD   rf   _get_encoderrA  rM  )rM   r8   r9   r:   rB   rV  positionrE   rE   rF   rU    s&    


zTextIOWrapper._configurec                 C   s|   d | jj| jj}z
| j}W n ty0   Y n0 |d |7 }z
| j}W n ty\   Y n0 |d |7 }|d | j S )Nz<{}.{}z name={0!r}z mode={0!r}z encoding={0!r}>)r   r\   rR   rS   r]   r/   r4   r8   )rM   rA   r]   r4   rE   rE   rF   r   '  s    


zTextIOWrapper.__repr__c                 C   s   | j S rU   )rY  re   rE   rE   rF   r8   8  s    zTextIOWrapper.encodingc                 C   s   | j S rU   )rZ  re   rE   rE   rF   r9   <  s    zTextIOWrapper.errorsc                 C   s   | j S rU   )rd  re   rE   rE   rF   rB   @  s    zTextIOWrapper.line_bufferingc                 C   s   | j S rU   )re  re   rE   rE   rF   rV  D  s    zTextIOWrapper.write_throughc                 C   s   | j S rU   )r   re   rE   rE   rF   rD   H  s    zTextIOWrapper.buffer)r8   r9   r:   rB   rV  c                C   s   | j d ur*|d us"|d us"|tur*td|d u rH|d u rB| j}q^d}nt|ts^td| |d u rn| j}nt|tstd| |tu r| j}| 	| |d u r| j
}|d u r| j}|   | ||||| d S )NzPIt is not possible to set the encoding or newline of stream after the first readr+  r   r   )r\  EllipsisrZ   rZ  r   r   r    rY  r`  rF  rB   rV  rl   rU  )rM   r8   r9   r:   rB   rV  rE   rE   rF   reconfigureL  s>    




zTextIOWrapper.reconfigurec                 C   s   | j rtd| jS rz   )rn   r#   r#  re   rE   rE   rF   rr   u  s    zTextIOWrapper.seekablec                 C   s
   | j  S rU   )rD   rv   re   rE   rE   rF   rv   z  s    zTextIOWrapper.readablec                 C   s
   | j  S rU   )rD   rx   re   rE   rE   rF   rx   }  s    zTextIOWrapper.writablec                 C   s   | j   | j| _d S rU   )rD   rl   r#  rS  re   rE   rE   rF   rl     s    
zTextIOWrapper.flushc                 C   s8   | j d ur4| js4z|   W | j   n| j   0 d S rU   )rD   rn   rl   r5   re   rE   rE   rF   r5     s    
zTextIOWrapper.closec                 C   s   | j jS rU   )rD   rn   re   rE   rE   rF   rn     s    zTextIOWrapper.closedc                 C   s   | j jS rU   )rD   r]   re   rE   rE   rF   r]     s    zTextIOWrapper.namec                 C   s
   | j  S rU   )rD   r,   re   rE   rE   rF   r,     s    zTextIOWrapper.filenoc                 C   s
   | j  S rU   )rD   r)   re   rE   rE   rF   r)     s    zTextIOWrapper.isattyc                 C   s   | j rtdt|ts(td|jj t|}| js<| j	oBd|v }|rf| jrf| j
dkrf|d| j
}| jpr|  }||}| j| | j	r|sd|v r|   | d d | _| jr| j  |S )Nr   zcan't write %s to text streamr6  r4  r   )rn   r#   r   r   r    r\   rQ   r"   ra  rd  rc  r;  r[  rf  encoderD   r   rl   _set_decoded_charsrR  r\  rC  )rM   r(  lengthZhaslfencoderr   rE   rE   rF   r     s(    



zTextIOWrapper.writec                 C   s   t | j}|| j| _| jS rU   )r,  getincrementalencoderrY  rZ  r[  )rM   Zmake_encoderrE   rE   rF   rf    s    zTextIOWrapper._get_encoderc                 C   s2   t | j}|| j}| jr(t|| j}|| _|S rU   )r,  getincrementaldecoderrY  rZ  r^  r*  r_  r\  )rM   Zmake_decoderr/  rE   rE   rF   _get_decoder  s    
zTextIOWrapper._get_decoderc                 C   s   || _ d| _d S r   )rP  rQ  )rM   charsrE   rE   rF   rk    s    z TextIOWrapper._set_decoded_charsc                 C   sF   | j }|d u r| j|d  }n| j|||  }|  j t|7  _ |S rU   )rQ  rP  r"   )rM   r   offsetrq  rE   rE   rF   _get_decoded_chars  s    z TextIOWrapper._get_decoded_charsc                 C   s$   | j |k rtd|  j |8  _ d S )Nz"rewind decoded_chars out of bounds)rQ  AssertionErrorr   rE   rE   rF   _rewind_decoded_chars  s    
z#TextIOWrapper._rewind_decoded_charsc                 C   s   | j d u rtd| jr&| j  \}}| jr<| j| j}n| j| j}| }| j 	||}| 
| |rt|t| j | _nd| _| jr||| f| _| S )Nz
no decoderrX  )r\  r#   rS  r>  rT  rD   r   _CHUNK_SIZEr   r7  rk  r"   rP  r]  rR  )rM   
dec_buffer	dec_flagsinput_chunkeofZdecoded_charsrE   rE   rF   _read_chunk  s     

zTextIOWrapper._read_chunkr   c                 C   s(   ||d> B |d> B |d> B t |d> B S )N@            )r@  )rM   rg  rx  bytes_to_feedneed_eofchars_to_skiprE   rE   rF   _pack_cookie  s
    
zTextIOWrapper._pack_cookiec                 C   sJ   t |d\}}t |d\}}t |d\}}t |d\}}|||t||fS )Nl            )divmodr@  )rM   Zbigintrestrg  rx  r  r  r  rE   rE   rF   _unpack_cookie		  s
    zTextIOWrapper._unpack_cookiec              	   C   sP  | j std| jstd|   | j }| j}|d u sF| jd u rX| j	rTt
d|S | j\}}|t|8 }| j}|dkr| ||S | }zt| j| }d}|dkr"|d|f t||d | }	|	|kr| \}
}|
s|}||	8 }q4|t|
8 }d}q||8 }|d }qd}|d|f || }|}|dkrb| ||W || S d}d}d}t|t|D ]x}|d7 }|t||||d  7 }| \}}|s||kr||7 }||8 }|dd  }}}||kr| q"q||t|jdd	d
7 }d	}||k r"td| |||||W || S || 0 d S )N!underlying stream is not seekablez(telling position disabled by next() callzpending decoded textr   r
   r   r   FTr2  z'can't reconstruct logical file position)r#  rZ   rS  r.   rl   rD   rf   r\  rR  rP  rt  r"   rQ  r  r>  r   r]  rA  r7  range)rM   rg  r/  rx  Z
next_inputr  saved_stateZ
skip_bytesZ	skip_backr   r   d	start_posZstart_flagsZ	bytes_fedr  Zchars_decodedirw  rE   rE   rF   rf   	  s    





 





zTextIOWrapper.tellc                 C   s$   |    |d u r|  }| j|S rU   )rl   rf   rD   rh   ri   rE   rE   rF   rh   s	  s    zTextIOWrapper.truncatec                 C   s*   | j d u rtd|   | j}d | _|S )Nzbuffer is already detached)rD   r#   rl   r   )rM   rD   rE   rE   rF   r   y	  s    
zTextIOWrapper.detachc                    s   fdd} j rtd js(td|tkrN|dkr@tdd}  }nZ|tkr|dkrftd    j	d|} 
d d  _ jr j  || |S |dkrtd	|f |dk rtd
|f     |\}}}}}	 j	|  
d d  _|dkr* jr* j  n@ js>|s>|	rj jpL   _ jd|f |df _|	r j|}
 
 j|
| ||
f _t j|	k rtd|	 _|| |S )Nc                    sF   z j p  }W n ty$   Y n0 | dkr:|d n|  d S r   )r[  rf  rM  rA  rC  )rg  rm  re   rE   rF   _reset_encoder	  s    z*TextIOWrapper.seek.<locals>._reset_encoderr   r  r   z#can't do nonzero cur-relative seeksz#can't do nonzero end-relative seeksr   zunsupported whence (%r)r   r   z#can't restore logical file position)rn   r#   r#  rZ   r   rf   r	   rl   rD   r_   rk  rR  r\  rC  r  rp  rA  r   r7  r"   rP  r.   rQ  )rM   Zcookierc   r  rg  r  rx  r  r  r  ry  rE   re   rF   r_   	  s`    





zTextIOWrapper.seekc                 C   s   |    |d u rd}n2z
|j}W n  ty@   t|dY n0 | }| jpT|  }|dk r|  |j| j	 dd }| 
d d | _|S d}| |}t||k r|s|   }|| |t| 7 }q|S d S )Nr   r   r   Tr2  r   F)rw   r   r/   r    r\  rp  rs  r7  rD   r   rk  rR  r"   r{  )rM   r   r   r/  rA   rz  rE   rE   rF   r   	  s,    



zTextIOWrapper.readc                 C   s(   d| _ |  }|s$d | _| j| _ t|S rq   )rS  r   rR  r#  r   r   rE   rE   rF   r   	  s    zTextIOWrapper.__next__c           	      C   s  | j rtd|d u rd}n2z
|j}W n  tyF   t|dY n0 | }|  }d}| jsh|   d  }}| jr|	d|}|dkr|d }qnt
|}n| jrD|	d|}|	d|}|dkr|dkrt
|}n|d }qnX|dkr|d }qn@||k r|d }qn(||d kr6|d }qn|d }qn(|	| j}|dkrl|t
| j }q|dkrt
||kr|}q|  r| jrqq| jr||  7 }qp| d	 d | _|S qp|dkr||kr|}| t
||  |d | S )
Nr   r   r   r   r6  r
   r4  r   r   )rn   r#   r   r/   r    rs  r\  rp  r_  r   r"   r^  r`  r{  rP  rk  rR  ru  )	rM   r   r   r   startrb   endposZnlposZcrposrE   rE   rF   r   	  st    







zTextIOWrapper.readlinec                 C   s   | j r| j jS d S rU   )r\  r)  re   rE   rE   rF   r)  N
  s    zTextIOWrapper.newlines)NNNFF)NNNFF)N)r   r   Fr   )N)r   )N)N)+rQ   rR   rS   rv  r   r   rF  rU  r   r   r8   r9   rB   rV  rD   rh  ri  rr   rv   rx   rl   r5   rn   r]   r,   r)   r   rf  rp  rk  rs  ru  r{  r  r  rf   rh   r   r_   r   r   r   r)  rE   rE   rE   rF   r3     sl     
*  
$




)



*  

c

K
	
]r3   c                       sN   e Zd Zd fdd	Zdd Zdd Zed	d
 Zedd Zdd Z	  Z
S )StringIOr   r6  c                    sf   t t| jt dd|d |d u r(d| _|d urbt|tsNtdt	|j
| | | d d S )Nzutf-8surrogatepass)r8   r9   r:   Fz*initial_value must be str or None, not {0}r   )r   r  r   r   ra  r   r   r    r   rW  rQ   r   r_   )rM   Zinitial_valuer:   r   rE   rF   r   Z
  s    

zStringIO.__init__c              	   C   sX   |    | jp|  }| }|  z |j| j ddW || S || 0 d S )NTr2  )	rl   r\  rp  r>  rC  r7  rD   r   rA  )rM   r/  Z	old_staterE   rE   rF   r   j
  s    
zStringIO.getvaluec                 C   s
   t | S rU   )objectr   re   rE   rE   rF   r   t
  s    zStringIO.__repr__c                 C   s   d S rU   rE   re   rE   rE   rF   r9   y
  s    zStringIO.errorsc                 C   s   d S rU   rE   re   rE   rE   rF   r8   }
  s    zStringIO.encodingc                 C   s   |  d d S r   r`   re   rE   rE   rF   r   
  s    zStringIO.detach)r   r6  )rQ   rR   rS   r   r   r   r   r9   r8   r   r   rE   rE   r   rF   r  S
  s   


r  )r   r   NNNTN)8r   abcr,  r   r  sys_threadr   r   platformmsvcrtr   r  ior   r   r   r	   r   r   addr   	SEEK_DATAr*   r   r  dev_modero   rN  rG   rJ   	open_coder/   rK   rT   rZ   r.   r#   ABCMetar[   registerr   _ior(   r   r   r   r2   r1   r   r0   r'  r-  r*  r3   r  rE   rE   rE   rF   <module>   s   

  
 [

	
  #=
gk  CiIJ  Y@U     &