a XC?h�l�@svddlZddlZddlZddlZddlZddlZddlmZej dvrTddl m Z ndZ ddl Z ddl mZmZmZmZhd�Zeed�r�e�ej�e�ej�dZeZeed �p�ejjZeZd5d d�Zdd�Zz e jZWne �y�eZYn0Gdd�d�Z!Gdd�d�Z"z e j#Z#Wn&e �yBGdd�de$e%�Z#Yn0Gdd�dej&d�Z'e j'�(e'�Gdd�de'�Z)e j)�(e)�ddl*m+Z+e)�(e+�Gdd�de'�Z,e j,�(e,�Gdd �d e,�Z-Gd!d"�d"e,�Z.Gd#d$�d$e-�Z/Gd%d&�d&e-�Z0Gd'd(�d(e,�Z1Gd)d*�d*e0e/�Z2Gd+d,�d,e)�Z+Gd-d.�d.e'�Z3e j3�(e3�Gd/d0�d0ej4�Z5Gd1d2�d2e3�Z6Gd3d4�d4e6�Z7dS)6�N)� allocate_lock>�cygwinZwin32)�setmode)�__all__�SEEK_SET�SEEK_CUR�SEEK_END>r��� SEEK_HOLEi Zgettotalrefcount�r�����Tc Cs�t|t�st�|�}t|tttf�s0td|��t|t�sFtd|��t|t�s\td|��|durzt|t�sztd|��|dur�t|t�s�td|��t|�}|td�s�t|�t|�kr�t d|��d|v} d|v} d |v} d |v} d |v} d |v}d |v}d|v�rD| �s"| �s"| �s"| �r*t d��ddl }|� dt d�d} |�rX|�rXt d��| | | | dk�rvt d��| �s�| �s�| �s�| �s�t d��|�r�|du�r�t d��|�r�|du�r�t d��|�r�|du�r�t d��|�r|dk�rddl }|� dt d�t|| �rd�pd| �r"d�p$d| �r2d �p4d| �rBd �pDd| �rRd �pTd||d�}|}�z"d}|dk�s�|dk�r�|���r�d}d}|dk�r�t}zt�|���j}Wnttf�y�Yn0|dk�r�|}|dk�r�t d ��|dk�r |�r|WSt d!��| �rt||�}n<| �s0| �s0| �r��d�}|sdS|�d�dp&t|�}�dkr:t|��}|S)Nr � r)rz�findr!�min)Z readahead�n�rH�sizer@rA� nreadaheads  z#IOBase.readline..nreadaheadcSsdS�Nr r@r@r@r@rAr�!sr � is not an integerrr{) �hasattr� __index__r.r� bytearrayr!�read�endswithr)rHr�r�� size_index�resrr@rrA�readline s&      zIOBase.readlinecCs |��|SrPrer`r@r@rA�__iter__6szIOBase.__iter__cCs|��}|st�|SrP)r�� StopIteration�rH�liner@r@rA�__next__:szIOBase.__next__cCsP|dus|dkrt|�Sd}g}|D]&}|�|�|t|�7}||kr$qLq$|S�Nr)�list�appendr!)rH�hintr~�linesr�r@r@rA� readlines@s  zIOBase.readlinescCs |��|D]}|�|�q dSrP)rf�write)rHr�r�r@r@rA� writelinesRszIOBase.writelines)r)N)N)N)N)N)r )N)rLrMrNrYrZrarcrgrhr4rkrmrprqrrrsrt�propertyrirfrxryr+r(r�r�r�r�r�r@r@r@rArV;s4"         * rV)� metaclassc@s.eZdZd dd�Zdd�Zdd�Zdd �Zd S) � RawIOBaser cCsP|dur d}|dkr|��St|���}|�|�}|dur>dS||d�=t|�S)Nr r)�readallr�r��readintor)rHr�rr~r@r@rAr�ms   zRawIOBase.readcCs4t�}|�t�}|sq ||7}q|r,t|�S|SdSrP)r�r�r)r)rHr��datar@r@rAr�~s  zRawIOBase.readallcCs|�d�dS)Nr�r[�rHrr@r@rAr��szRawIOBase.readintocCs|�d�dS�Nr�r[r�r@r@rAr��szRawIOBase.writeN)r )rLrMrNr�r�r�r�r@r@r@rAr�_s r�)r'c@sHeZdZddd�Zddd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dS)�BufferedIOBaser cCs|�d�dS�Nr�r[rr@r@rAr��szBufferedIOBase.readcCs|�d�dS)N�read1r[rr@r@rAr��szBufferedIOBase.read1cCs|j|dd�S)NF�r��� _readintor�r@r@rAr��s zBufferedIOBase.readintocCs|j|dd�S)NTr�r�r�r@r@rA� readinto1�s zBufferedIOBase.readinto1cCsVt|t�st|�}|�d�}|r0|�t|��}n|�t|��}t|�}||d|�<|S�N�B)r� memoryview�castr�r!r�)rHrr�r�r~r@r@rAr��s   zBufferedIOBase._readintocCs|�d�dSr�r[r�r@r@rAr��s zBufferedIOBase.writecCs|�d�dS�N�detachr[r`r@r@rAr��szBufferedIOBase.detachN)r )r ) rLrMrNr�r�r�r�r�r�r�r@r@r@rAr��s    r�c@s�eZdZdd�Zd#dd�Zdd�Zd$d d �Zd d �Zd d�Zdd�Z dd�Z e dd��Z e dd��Z e dd��Ze dd��Zdd�Zdd�Zdd �Zd!d"�ZdS)%�_BufferedIOMixincCs ||_dSrP��_raw�rHr<r@r@rA�__init__sz_BufferedIOMixin.__init__rcCs"|j�||�}|dkrtd��|S)Nrz#seek() returned an invalid position)r<rZr-)rHr]r^Z new_positionr@r@rArZsz_BufferedIOMixin.seekcCs|j��}|dkrtd��|S)Nrz#tell() returned an invalid position)r<rar-rdr@r@rAras z_BufferedIOMixin.tellNcCs4|��|��|��|dur(|��}|j�|�SrP)rfrtrgrar<rcrdr@r@rArc%s z_BufferedIOMixin.truncatecCs|jrtd��|j��dS)N�flush on closed file)rir"r<rgr`r@r@rArg6sz_BufferedIOMixin.flushcCs8|jdur4|js4z|��W|j��n |j��0dSrP)r<rirgr4r`r@r@rAr4;s z_BufferedIOMixin.closecCs*|jdurtd��|��|j}d|_|S)Nzraw stream already detached)r<r"rgr�r�r@r@rAr�Cs  z_BufferedIOMixin.detachcCs |j��SrP)r<rmr`r@r@rArmMsz_BufferedIOMixin.seekablecCs|jSrPr�r`r@r@rAr<Psz_BufferedIOMixin.rawcCs|jjSrP)r<rir`r@r@rAriTsz_BufferedIOMixin.closedcCs|jjSrP)r<rXr`r@r@rArXXsz_BufferedIOMixin.namecCs|jjSrP)r<r3r`r@r@rAr3\sz_BufferedIOMixin.modecCstd|jj�d���dS�Nzcannot pickle z object�rrWrLr`r@r@rA� __getstate__`sz_BufferedIOMixin.__getstate__cCsL|jj}|jj}z |j}Wnty8d�||�YS0d�|||�SdS)Nz<{}.{}>z<{}.{} name={!r}>)rWrMrNrXr.�format)rH�modnameZclsnamerXr@r@rA�__repr__cs  z_BufferedIOMixin.__repr__cCs |j��SrP)r<r+r`r@r@rAr+osz_BufferedIOMixin.filenocCs |j��SrP)r<r(r`r@r@rAr(rsz_BufferedIOMixin.isatty)r)N)rLrMrNr�rZrarcrgr4r�rmr�r<rirXr3r�r�r+r(r@r@r@rAr� s(         r�cs�eZdZdZd dd�Zdd�Zdd�Zdd �Z�fd d �Zd!d d�Z d"dd�Z dd�Z d#dd�Z dd�Z d$dd�Zdd�Zdd�Zdd�Z�ZS)%�BytesIONcCs&t�}|dur||7}||_d|_dSr�)r��_buffer�_pos)rHZ initial_bytes�bufr@r@rAr�~s zBytesIO.__init__cCs|jrtd��|j��S)Nz__getstate__ on closed file)rir"�__dict__�copyr`r@r@rAr��szBytesIO.__getstate__cCs|jrtd��t|j�S)Nzgetvalue on closed file)rir"rr�r`r@r@rA�getvalue�szBytesIO.getvaluecCs|jrtd��t|j�S)Nzgetbuffer on closed file)rir"r�r�r`r@r@rA� getbuffer�szBytesIO.getbuffercs"|jdur|j��t���dSrP)r��clear�superr4r`�rWr@rAr4�s  z BytesIO.closer cCs�|jrtd��|durd}n2z |j}Wn tyFt|�d���Yn0|�}|dkr`t|j�}t|j�|jkrtdStt|j�|j|�}|j|j|�}||_t |�S)N�read from closed filer r�r�) rir"r�r.rr!r�r�r}r)rHr�r�Znewposrr@r@rAr��s"   z BytesIO.readcCs |�|�SrP)r�rr@r@rAr��sz BytesIO.read1cCs�|jrtd��t|t�r td��t|��}|j}Wd�n1sD0Y|dkrZdS|j}|t|j �kr�d|t|j �}|j |7_ ||j |||�<|j|7_|S)N�write to closed file� can't write str to binary streamr�) rir"rrrr��nbytesr�r!r�)rHrZviewr~r]Zpaddingr@r@rAr��s  $z BytesIO.writercCs�|jrtd��z |j}Wn ty8t|�d���Yn0|�}|dkrf|dkr^td|f��||_nD|dkr�td|j|�|_n(|dkr�tdt|j�|�|_ntd��|jS)Nzseek on closed filer�r�negative seek position %rr r zunsupported whence value) rir"r�r.rr��maxr!r�)rHr]r^� pos_indexr@r@rArZ�s"  z BytesIO.seekcCs|jrtd��|jS)N�tell on closed file)rir"r�r`r@r@rAra�sz BytesIO.tellcCsv|jrtd��|dur|j}nHz |j}Wn tyHt|�d���Yn0|�}|dkrftd|f��|j|d�=|S)Nztruncate on closed filer�rznegative truncate position %r)rir"r�r�r.rr�)rHr]r�r@r@rArc�s   zBytesIO.truncatecCs|jrtd��dS�NrvTrwr`r@r@rArq�szBytesIO.readablecCs|jrtd��dSr�rwr`r@r@rArs�szBytesIO.writablecCs|jrtd��dSr�rwr`r@r@rArm�szBytesIO.seekable)N)r )r )r)N)rLrMrNr�r�r�r�r�r4r�r�r�rZrarcrqrsrm� __classcell__r@r@r�rAr�vs      r�c@steZdZefdd�Zdd�Zdd�Zddd �Zdd d �Zdd d�Z ddd�Z ddd�Z dd�Z dd�Z ddd�ZdS) r1cCsF|��std��t�||�|dkr,td��||_|��t�|_dS)Nz "raw" argument must be readable.r�invalid buffer size) rqr-r�r�r"� buffer_size�_reset_read_buf�Lock� _read_lock�rHr<r�r@r@rAr�s zBufferedReader.__init__cCs |j��SrP)r<rqr`r@r@rArqszBufferedReader.readablecCsd|_d|_dS)Nr�r)� _read_buf� _read_posr`r@r@rAr� szBufferedReader._reset_read_bufNcCsL|dur|dkrtd��|j�|�|�Wd�S1s>0YdS)Nr zinvalid number of bytes to read)r"r��_read_unlockedrr@r@rAr�$szBufferedReader.readc Cs�d}d}|j}|j}|dus$|dkr�|��t|jd�rj|j��}|durZ||d�pXdS||d�|S||d�g}d}|j��}||vr�|}q�|t|�7}|�|�q|d� |�p�|St|�|} || kr�|j|7_||||�S||d�g}t |j |�} | |k�rH|j�| �}||v�r.|}�qH| t|�7} |�|��qt || �}d� |�} | |d�|_d|_| �r�| d|�S|S)Nr�)r�Nr r�r) r�r�r�r�r<r�r�r!r��joinr�r�r}) rHr~Z nodata_valZ empty_valuesr�r]�chunkZchunksZ current_size�availZwanted�outr@r@rAr�1sL             zBufferedReader._read_unlockedrcCs4|j�|�|�Wd�S1s&0YdSrP)r��_peek_unlockedrr@r@rArzeszBufferedReader.peekcCsrt||j�}t|j�|j}||ks,|dkrb|j|}|j�|�}|rb|j|jd�||_d|_|j|jd�Sr�)r}r�r!r�r�r<r�)rHr~ZwantZhaveZto_readZcurrentr@r@rAr�os   zBufferedReader._peek_unlockedr cCsj|dkr|j}|dkrdS|j�6|�d�|�t|t|j�|j��Wd�S1s\0YdS)Nrr�r )r�r�r�r�r}r!r�r�rr@r@rAr�zs �zBufferedReader.read1cCs t|t�st|�}|jdkr dS|�d�}d}|j��|t|�kr�tt|j�|jt|��}|r�|j|j|j|�||||�<|j|7_||7}|t|�kr�q�t|�||j kr�|j � ||d��}|s�q�||7}n|r�|s�|� d�s�q�|r6|r6q�q6Wd�n1�s0Y|S)Nrr�r ) rr�r�r�r�r!r}r�r�r�r<r�r�)rHr�r��writtenr�r~r@r@rAr��s6    �   $zBufferedReader._readintocCst�|�t|j�|jSrP)r�rar!r�r�r`r@r@rAra�szBufferedReader.tellcCsp|tvrtd��|j�F|dkr4|t|j�|j8}t�|||�}|��|Wd�S1sb0YdS)N�invalid whence valuer ) �valid_seek_flagsr"r�r!r�r�r�rZr�r\r@r@rArZ�szBufferedReader.seek)N)N)r)r)r )r)rLrMrNr)r�rqr�r�r�rzr�r�r�rarZr@r@r@rAr1s  4 .r1c@s\eZdZefdd�Zdd�Zdd�Zddd �Zd d �Zd d �Z dd�Z ddd�Z dd�Z dS)r0cCsF|��std��t�||�|dkr,td��||_t�|_t�|_ dS)Nz "raw" argument must be writable.rr�) rsr-r�r�r"r�r�� _write_bufr�� _write_lockr�r@r@rAr��s zBufferedWriter.__init__cCs |j��SrP)r<rsr`r@r@rArs�szBufferedWriter.writablec Cst|t�rtd��|j��|jr(td��t|j�|jkr@|� �t|j�}|j� |�t|j�|}t|j�|jkr�z |� �Wnnt y�}zVt|j�|jkr�t|j�|j}||8}|jd|j�|_t |j |j |��WYd}~n d}~00|Wd�S1�s 0YdS)Nr�r�)rrrr�rir"r!r�r��_flush_unlocked�extend�BlockingIOError�errno�strerror)rHrZbeforer��eZoverager@r@rAr��s(    &zBufferedWriter.writeNcCsP|j�6|��|dur"|j��}|j�|�Wd�S1sB0YdSrP)r�r�r<rarcrdr@r@rArc�s  zBufferedWriter.truncatecCs2|j�|��Wd�n1s$0YdSrP)r�r�r`r@r@rArgszBufferedWriter.flushcCs�|jrtd��|jr�z|j�|j�}Wnty@td��Yn0|durXttjdd��|t |j�ksn|dkrvt d��|jd|�=qdS)Nr�zHself.raw should implement RawIOBase: it should not raise BlockingIOErrorz)write could not complete without blockingrz*write() returned incorrect number of bytes) rir"r�r<r�r�� RuntimeErrorr�ZEAGAINr!r-�rHr~r@r@rAr�s �zBufferedWriter._flush_unlockedcCst�|�t|j�SrP)r�rar!r�r`r@r@rAraszBufferedWriter.tellrcCsP|tvrtd��|j�&|��t�|||�Wd�S1sB0YdS)Nr�)r�r"r�r�r�rZr\r@r@rArZs zBufferedWriter.seekcCs�|j�0|jdus|jr(Wd�dSWd�n1s<0Yz<|��W|j�|j��Wd�q�1sx0Yn2|j�|j��Wd�n1s�0Y0dSrP)r�r<rirgr4r`r@r@rAr4 s. *�zBufferedWriter.close)N)r) rLrMrNr)r�rsr�rcrgr�rarZr4r@r@r@rAr0�s   r0c@s�eZdZefdd�Zddd�Zdd�Zdd �Zdd d �Zd d d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zedd��ZdS)!�BufferedRWPaircCs<|��std��|��s td��t||�|_t||�|_dS)Nz#"reader" argument must be readable.z#"writer" argument must be writable.)rqr-rsr1�readerr0�writer)rHr�r�r�r@r@rAr�@s  zBufferedRWPair.__init__r cCs|dur d}|j�|�S�Nr )r�r�rr@r@rAr�NszBufferedRWPair.readcCs |j�|�SrP)r�r�r�r@r@rAr�SszBufferedRWPair.readintocCs |j�|�SrP)r�r�r�r@r@rAr�VszBufferedRWPair.writercCs |j�|�SrP)r�rzrr@r@rArzYszBufferedRWPair.peekcCs |j�|�SrP)r�r�rr@r@rAr�\szBufferedRWPair.read1cCs |j�|�SrP)r�r�r�r@r@rAr�_szBufferedRWPair.readinto1cCs |j��SrP)r�rqr`r@r@rArqbszBufferedRWPair.readablecCs |j��SrP)r�rsr`r@r@rArseszBufferedRWPair.writablecCs |j��SrP)r�rgr`r@r@rArghszBufferedRWPair.flushcCs*z|j��W|j��n |j��0dSrP)r�r4r�r`r@r@rAr4ks zBufferedRWPair.closecCs|j��p|j��SrP)r�r(r�r`r@r@rAr(qszBufferedRWPair.isattycCs|jjSrP)r�rir`r@r@rAritszBufferedRWPair.closedN)r )r)r )rLrMrNr)r�r�r�r�rzr�r�rqrsrgr4r(r�rir@r@r@rAr�0s    r�c@sjeZdZefdd�Zddd�Zdd�Zdd d �Zdd d �Zd d�Z ddd�Z ddd�Z dd�Z dd�Z dS)r/cCs(|��t�|||�t�|||�dSrP)rpr1r�r0r�r@r@rAr��szBufferedRandom.__init__rcCs�|tvrtd��|��|jr^|j�*|j�|jt|j�d�Wd�n1sT0Y|j�||�}|j�|� �Wd�n1s�0Y|dkr�t d��|S)Nr�r rz seek() returned invalid position) r�r"rgr�r�r<rZr�r!r�r-r\r@r@rArZ�s8&zBufferedRandom.seekcCs|jrt�|�St�|�SdSrP)r�r0rar1r`r@r@rAra�s zBufferedRandom.tellNcCs|dur|��}t�||�SrP)rar0rcrdr@r@rArc�szBufferedRandom.truncatecCs |dur d}|��t�||�Sr�)rgr1r�rr@r@rAr��szBufferedRandom.readcCs|��t�||�SrP)rgr1r�r�r@r@rAr��szBufferedRandom.readintocCs|��t�||�SrP)rgr1rzrr@r@rArz�szBufferedRandom.peekr cCs|��t�||�SrP)rgr1r�rr@r@rAr��szBufferedRandom.read1cCs|��t�||�SrP)rgr1r�r�r@r@rAr��szBufferedRandom.readinto1cCsZ|jrN|j�2|j�|jt|j�d�|��Wd�n1sD0Yt�||�Sr�) r�r�r<rZr�r!r�r0r�r�r@r@rAr��s &zBufferedRandom.write)r)N)N)r)r )rLrMrNr)r�rZrarcr�r�rzr�r�r�r@r@r@rAr/ys      r/cs�eZdZdZdZdZdZdZdZdZ d0dd�Z dd �Z d d �Z d d �Z dd�Zd1dd�Zd2dd�Zdd�Zdd�Zdd�Zefdd�Zdd�Zd3dd�Z�fd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zed,d-��Zed.d/��Z �Z!S)4r'r FNTr c CsH|jdkr0z|jrt�|j�Wd|_nd|_0t|t�rBtd��t|t�rb|}|dkrftd��nd}t|t �s~td|f��t |�t d�ks�td|f��t dd�|D��d ks�|� d �d kr�td ��d |vr�d |_ d |_tjtjB}nTd|vr�d |_d}n@d|v�rd |_tjtjB}n"d|v�r>d |_d |_tjtjB}d |v�rTd |_d |_|j�rp|j�rp|tjO}n|j�r�|tjO}n |tjO}|ttdd�O}ttdd��p�ttdd�}||O}d}�zT|dk�r@|�s�td��|du�r�t�||d�}n0|||�}t|t��std��|dk�r*td��|}|�s@t�|d�||_t�|�} z(t�| j��rvt t!j"t�#t!j"�|��Wnt$�y�Yn0t| dd�|_%|j%d k�r�t&|_%t'�r�t'|tj(�||_)|j�rzt�*|dt+�Wn6t�y} z| j!t!j,k�r�WYd} ~ n d} ~ 00Wn"|du�r6t�|��Yn0||_dS)Nrr z$integer argument expected, got floatznegative file descriptorzinvalid mode: %szxrwab+css|]}|dvVqdS)ZrwaxNr@)�.0�cr@r@rA� �r�z"FileIO.__init__..r rzKMust have exactly one of create/read/write/append mode and at most one plusrTr rr�O_BINARYZ O_NOINHERIT� O_CLOEXECz'Cannot use closefd=False with file namei�zexpected integer from openerzNegative file descriptorFr,)-�_fd�_closefdrr4r�floatrrr"rr �sum�count�_created� _writable�O_EXCL�O_CREAT� _readable�O_TRUNC� _appending�O_APPEND�O_RDWR�O_RDONLY�O_WRONLY�getattrrBr-�set_inheritabler*�stat�S_ISDIR�st_mode�IsADirectoryErrorr�ZEISDIRr�r.�_blksizer)�_setmoder�rX�lseekrZESPIPE) rHr5r3r:r�fd�flagsZnoinherit_flagZowned_fdZfdfstatr�r@r@rAr��s�     $        �        �    zFileIO.__init__cCsB|jdkr>|jr>|js>ddl}|jd|ftd|d�|��dS)Nrzunclosed file %rr )� stacklevel�source)r�r�rir#r$�ResourceWarningr4)rHr#r@r@rArkEs �zFileIO.__del__cCstd|jj�d���dSr�r�r`r@r@rAr�LszFileIO.__getstate__cCsnd|jj|jjf}|jr"d|Sz |j}Wn(tyTd||j|j|jfYS0d|||j|jfSdS)Nz%s.%sz <%s [closed]>z<%s fd=%d mode=%r closefd=%r>z<%s name=%r mode=%r closefd=%r>) rWrMrNrirXr.r�r3r�)rH� class_namerXr@r@rAr�Os�  � �zFileIO.__repr__cCs|jstd��dS)NzFile not open for reading)r�rUr`r@r@rArr]szFileIO._checkReadablecCs|jstd��dS)NzFile not open for writing)r�rUrnr@r@rArtaszFileIO._checkWritablecCsR|��|��|dus |dkr(|��Szt�|j|�WStyLYdS0dSr�)rfrrr�rr�r�r�rr@r@rAr�es z FileIO.readcCs�|��|��t}z6t�|jdt�}t�|j�j}||krH||d}Wnt y\Yn0t �}t |�|kr�t |�}|t |t�7}|t |�}zt� |j|�}Wnty�|r�Yq�YdS0|s�q�||7}qdt|�Sr_)rfrrr)rr r�rr*�st_sizer-r�r!r�r�r�r)rH�bufsizer]�endr=r~r�r@r@rAr�us2     zFileIO.readallcCs4t|��d�}|�t|��}t|�}||d|�<|Sr�)r�r�r�r!)rHr�mr�r~r@r@rAr��s  zFileIO.readintocCs:|��|��zt�|j|�WSty4YdS0dSrP)rfrtrr�r�r�r�r@r@rAr��s  z FileIO.writecCs*t|t�rtd��|��t�|j||�S)Nzan integer is required)rr�rrfrr r�r\r@r@rArZ�s z FileIO.seekcCs|��t�|jdt�Sr�)rfrr r�rr`r@r@rAra�sz FileIO.tellcCs2|��|��|dur |��}t�|j|�|SrP)rfrtrar� ftruncater�rr@r@rArc�s zFileIO.truncatecs8|js4z |jrt�|j�Wt���n t���0dSrP)rir�rr4r�r�r`r�r@rAr4�s z FileIO.closecCsD|��|jdur>z |��Wnty6d|_Yn0d|_|jS)NFT)rf� _seekablerar-r`r@r@rArm�s    zFileIO.seekablecCs|��|jSrP)rfr�r`r@r@rArq�szFileIO.readablecCs|��|jSrP)rfr�r`r@r@rArs�szFileIO.writablecCs|��|jSrP)rfr�r`r@r@rAr+�sz FileIO.filenocCs|��t�|j�SrP)rfrr(r�r`r@r@rAr(�sz FileIO.isattycCs|jSrP)r�r`r@r@rAr:�szFileIO.closefdcCsJ|jr|jrdSdSn0|jr,|jr&dSdSn|jrB|jrd?�Z#dRd@dA�Z$dBdC�Z%dSdDdE�Z&dTdFdG�Z'dHdI�Z(dUdJdK�Z)e dLdM��Z*dS)Vr2iNFc Cs$|�|�|durrzt�|���}Wnttfy:Yn0|durrz ddl}Wntyfd}Yn 0|�d�}t |t �s�t d|��t � |�js�d}t||��|dur�d}n$t |t �s�t d|��tr�t �|�||_d|_d|_d|_|j��|_|_t|jd �|_|�|||||�dS) Nr�asciiFrzG%r is not a text encoding; use codecs.open() to handle arbitrary codecsrrrr�)�_check_newliner�device_encodingr+r.rU�locale� ImportErrorZgetpreferredencodingrrr"r �lookup�_is_text_encoding� LookupError� _CHECK_ERRORS� lookup_errorr��_decoded_chars�_decoded_chars_used� _snapshotr?rmr�_tellingr�� _has_read1� _configure) rHr?r7r8r9r>� write_throughr<ror@r@rAr��s@             �zTextIOWrapper.__init__cCs>|dur$t|t�s$tdt|�f��|dvr:td|f��dS)Nzillegal newline type: %r)Nrr*r(r)zillegal newline value: %r)rrr�typer")rHr9r@r@rAr:�szTextIOWrapper._check_newlinecCs�||_||_d|_d|_d|_| |_|du|_||_|dk|_|pHt j |_ ||_ ||_ |jr�|��r�|j��}|dkr�z|���d�Wnty�Yn0dS)N�rr)� _encoding�_errors�_encoder�_decoder� _b2cratio�_readuniversal�_readtranslate�_readnl�_writetranslater�linesep�_writenl�_line_buffering�_write_throughrrsr?ra� _get_encoderr5r@)rHr7r8r9r>rI�positionr@r@rArHs&     zTextIOWrapper._configurecCs|d�|jj|jj�}z |j}Wnty0Yn0|d�|�7}z |j}Wnty\Yn0|d�|�7}|d�|j�S)Nz<{}.{}z name={0!r}z mode={0!r}z encoding={0!r}>)r�rWrMrNrXr.r3r7)rHr=rXr3r@r@rAr�'s �    zTextIOWrapper.__repr__cCs|jSrP)rLr`r@r@rAr78szTextIOWrapper.encodingcCs|jSrP)rMr`r@r@rAr8<szTextIOWrapper.errorscCs|jSrP)rWr`r@r@rAr>@szTextIOWrapper.line_bufferingcCs|jSrP)rXr`r@r@rArIDszTextIOWrapper.write_throughcCs|jSrP)r�r`r@r@rAr?HszTextIOWrapper.buffer)r7r8r9r>rIcCs�|jdur*|dus"|dus"|tur*td��|durH|durB|j}q^d}nt|t�s^td|��|durn|j}nt|t�s�td|��|tur�|j}|� |�|dur�|j }|dur�|j }|� �|� |||||�dS)NzPIt is not possible to set the encoding or newline of stream after the first readrrr)rO�EllipsisrUrMrrrrLrSr:r>rIrgrH)rHr7r8r9r>rIr@r@rA� reconfigureLs> ����      �zTextIOWrapper.reconfigurecCs|jrtd��|jSru)rir"rr`r@r@rArmuszTextIOWrapper.seekablecCs |j��SrP)r?rqr`r@r@rArqzszTextIOWrapper.readablecCs |j��SrP)r?rsr`r@r@rArs}szTextIOWrapper.writablecCs|j��|j|_dSrP)r?rgrrFr`r@r@rArg�s zTextIOWrapper.flushcCs8|jdur4|js4z|��W|j��n |j��0dSrP)r?rirgr4r`r@r@rAr4�s zTextIOWrapper.closecCs|jjSrP)r?rir`r@r@rAri�szTextIOWrapper.closedcCs|jjSrP)r?rXr`r@r@rArX�szTextIOWrapper.namecCs |j��SrP)r?r+r`r@r@rAr+�szTextIOWrapper.filenocCs |j��SrP)r?r(r`r@r@rAr(�szTextIOWrapper.isattycCs�|jrtd��t|t�s(td|jj��t|�}|js<|j oBd|v}|rf|jrf|j dkrf|� d|j �}|j pr|� �}|�|�}|j�|�|j r�|s�d|vr�|��|�d�d|_|jr�|j��|S)Nr�zcan't write %s to text streamr*r(r)rir"rrrrWrLr!rTrWrVr/rNrY�encoder?r�rg�_set_decoded_charsrErOr7)rHrZlengthZhaslf�encoderrr@r@rAr��s( �    zTextIOWrapper.writecCst�|j�}||j�|_|jSrP)r �getincrementalencoderrLrMrN)rHZ make_encoderr@r@rArY�s  zTextIOWrapper._get_encodercCs2t�|j�}||j�}|jr(t||j�}||_|SrP)r �getincrementaldecoderrLrMrQrrRrO)rHZ make_decoderr#r@r@rA� _get_decoder�s    zTextIOWrapper._get_decodercCs||_d|_dSr�)rCrD)rH�charsr@r@rAr^�sz TextIOWrapper._set_decoded_charscCsF|j}|dur|j|d�}n|j|||�}|jt|�7_|SrP)rDrCr!)rHr~�offsetrcr@r@rA�_get_decoded_chars�s z TextIOWrapper._get_decoded_charscCs$|j|krtd��|j|8_dS)Nz"rewind decoded_chars out of bounds)rD�AssertionErrorr�r@r@rA�_rewind_decoded_chars�s z#TextIOWrapper._rewind_decoded_charscCs�|jdurtd��|jr&|j��\}}|jr<|j�|j�}n|j�|j�}| }|j� ||�}|� |�|r�t |�t |j �|_ nd|_ |jr�|||f|_| S)Nz no decoderrK)rOr"rFr2rGr?r�� _CHUNK_SIZEr�r+r^r!rCrPrE)rH� dec_buffer� dec_flags� input_chunk�eofZ decoded_charsr@r@rA� _read_chunk�s  zTextIOWrapper._read_chunkrcCs(||d>B|d>B|d>Bt|�d>BS)N�@����)r4)rHrZrj� bytes_to_feed�need_eof� chars_to_skipr@r@rA� _pack_cookie�s � �zTextIOWrapper._pack_cookiecCsJt|d�\}}t|d�\}}t|d�\}}t|d�\}}|||t|�|fS)Nl)�divmodr4)rHZbigint�restrZrjrrrsrtr@r@rA�_unpack_cookie s zTextIOWrapper._unpack_cookiec CsP|jstd��|jstd��|��|j��}|j}|dusF|jdurX|j rTt d��|S|j\}}|t |�8}|j }|dkr�|� ||�S|��}�z�t|j|�}d}|dk�r"|�d|f�t |�|d|���} | |k�r|��\} } | s�| }|| 8}�q4|t | �8}d}q�||8}|d}q�d}|�d|f�||} |} |dk�rb|� | | �W|�|�Sd}d}d}t|t |��D]x}|d7}|t |�|||d���7}|��\}}|�s�||k�r�| |7} ||8}|dd} }}||k�r|�q"�q||t |jdd d ��7}d }||k�r"td ��|� | | |||�W|�|�S|�|�0dS) N�!underlying stream is not seekablez(telling position disabled by next() callzpending decoded textrr r�r FTr&z'can't reconstruct logical file position)rrUrFr-rgr?rarOrErCrfr!rDrur2rrPr5r+�range)rHrZr#rjZ next_inputrtZ saved_stateZ skip_bytesZ skip_backr~r�d� start_posZ start_flagsZ bytes_fedrsZ chars_decoded�irir@r@rAra s�           �     � �zTextIOWrapper.tellcCs$|��|dur|��}|j�|�SrP)rgrar?rcrdr@r@rArcs szTextIOWrapper.truncatecCs*|jdurtd��|��|j}d|_|S)Nzbuffer is already detached)r?r"rgr�)rHr?r@r@rAr�y s  zTextIOWrapper.detachc s��fdd�}�jrtd���js(td��|tkrN|dkr@td��d}���}nZ|tkr�|dkrftd������j� d|�}�� d�d�_ �j r��j � �||�|S|dkr�td |f��|dkr�td |f�������|�\}}}}} �j� |��� d�d�_ |dk�r*�j �r*�j � �n@�j �s>|�s>| �rj�j �pL����_ �j �d |f�|d f�_ | �r��j�|�} �� �j �| |��|| f�_ t�j�| k�r�td ��| �_||�|S) NcsFz�jp���}Wnty$Yn0|dkr:|�d�n|��dSr�)rNrYr@r5r7)rZr_r`r@rA�_reset_encoder� s  z*TextIOWrapper.seek.._reset_encoderr�ryrz#can't do nonzero cur-relative seeksz#can't do nonzero end-relative seeksrzunsupported whence (%r)r�r�z#can't restore logical file position)rir"rrUrrarrgr?rZr^rErOr7rxrbr5r�r+r!rCr-rD) rHZcookier^r~rZr|rjrrrsrtrkr@r`rArZ� s`    �       � zTextIOWrapper.seekcCs�|��|durd}n2z |j}Wn ty@t|�d���Yn0|�}|jpT|��}|dkr�|��|j|j� �dd�}|� d�d|_ |Sd}|�|�}t |�|kr�|s�|� � }||�|t |��7}q�|SdS)Nr r�rTr&rF)rrr�r.rrOrbrer+r?r�r^rEr!rm)rHr�r�r#r=rlr@r@rAr�� s,  �   zTextIOWrapper.readcCs(d|_|��}|s$d|_|j|_t�|Srl)rFr�rErr�r�r@r@rAr�� szTextIOWrapper.__next__c Cs|jrtd��|durd}n2z |j}Wn tyFt|�d���Yn0|�}|��}d}|jsh|��d}}|jr�|� d|�}|dkr�|d}�q�nt |�}n�|j �rD|� d|�}|� d|�}|dkr�|dkr�t |�}n |d}�q�nX|dk�r|d}�q�n@||k�r|d}�q�n(||dk�r6|d}�q�n |d}�q�n(|� |j �}|dk�rl|t |j �}�q�|dk�r�t |�|k�r�|}�q�|� ��r�|j�r��q��q�|j�r�||��7}qp|�d �d|_|Sqp|dk�r�||k�r�|}|�t |�|�|d|�S) Nr�r r�rr*r r(r r)rir"r�r.rrerOrbrRr|r!rQrSrmrCr^rErg) rHr�r�r��startr]�endposZnlposZcrposr@r@rAr�� st             zTextIOWrapper.readlinecCs|jr|jjSdSrP)rOrr`r@r@rArN szTextIOWrapper.newlines)NNNFF)NNNFF)N)rrFr)N)r)N)N)+rLrMrNrhr�r�r:rHr�r�r7r8r>rIr?r[r\rmrqrsrgr4rirXr+r(r�rYrbr^rergrmrurxrarcr�rZr�r�r�rr@r@r@rAr2�sl� *� $     � )    *� c  K  ]r2csNeZdZd�fdd� Zdd�Zdd�Zed d ��Zed d ��Zd d�Z �Z S)�StringIOrr*csftt|�jt�dd|d�|dur(d|_|durbt|t�sNtd�t |�j ���|� |�|� d�dS)Nzutf-8� surrogatepass)r7r8r9Fz*initial_value must be str or None, not {0}r) r�r�r�r�rTrrrr�rJrLr�rZ)rHZ initial_valuer9r�r@rAr�Z s� � zStringIO.__init__c CsX|��|jp|��}|��}|��z |j|j��dd�W|�|�S|�|�0dS)NTr&) rgrOrbr2r7r+r?r�r5)rHr#Z old_stater@r@rAr�j s �zStringIO.getvaluecCs t�|�SrP)�objectr�r`r@r@rAr�t szStringIO.__repr__cCsdSrPr@r`r@r@rAr8y szStringIO.errorscCsdSrPr@r`r@r@rAr7} szStringIO.encodingcCs|�d�dSr�r[r`r@r@rAr�� szStringIO.detach)rr*) rLrMrNr�r�r�r�r8r7r�r�r@r@r�rAr�S s   r�)r r NNNTN)8r�abcr r�r�sys�_threadrr��platformZmsvcrtrr �iorrrrr�r��addr � SEEK_DATAr)r�r�dev_moderjrArBrE� open_coder.rFrOrUr-r"�ABCMetarV�registerr��_ior'r�r�r�r1r0r�r/rr!rr2r�r@r@r@rA�s�     � [    # =   g kCiIJY@ U&