o
    ACe<                     @  s  U d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlZddlmZ ddlmZ erSd dlmZmZmZmZmZmZ d d	lmZ h d
Zde d< h dZ!de d< edZ"edddZ#edZ$edddZ%edddZ&ede'e(ddZ)ede'e(ddZ*erd dlm+Z+m,Z, 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%e,e% Z2G d&d' d'e,Z3G d(d) d)e,Z4G d*d+ d+e,Z5G d,d- d-e,Z6G d.d/ d/e,Z7G d0d1 d1e,Z8G d2d3 d3e,Z9G d4d5 d5e,Z:G d6d7 d7e,Z;G d8d9 d9e,e) Z<G d:d; d;e,Z=G d<d= d=e,Z>G d>d? d?e,e) Z?G d@dA dAe,Z@G dBdC dCe,e) ZAG dDdE dEe,ZBG dFdG dGe,ZCG dHdI dIe,e) ZDG dJdK dKe,e	 ZEG dLdM dMe,ZFG dNdO dOe,ZGG dPdQ dQe,ZHG dRdS dSe,e& ZIG dTdU dUe,e& ZJG dVdW dWe,e) ZKG dXdY dYe,e% ZLG dZd[ d[e,ZMG d\d] d]eee# ZNed^eOf ZPee'eOgeOf ZQe	_	`					dddqdrZRe					dddwdrZRe	`					ddd{drZRe	`					ddd~drZRe	`					ddddrZRe					ddddrZRe	`					ddddrZR	_	`					ddddrZRdddZSdS )    )annotationsN)partial)IOTYPE_CHECKINGAnyAnyStrBinaryIOCallableGenericIterableTypeVarUnionoverload   )async_wraps)AsyncResource)OpenBinaryModeOpenBinaryModeReadingOpenBinaryModeUpdatingOpenBinaryModeWritingOpenTextModeStrOrBytesPath)Literal>   closedseekablenewlinesnameisattywritablefilenomodegetvaluereadableerrorsbufferrawline_bufferingencoding	getbufferclosefdzset[str]_FILE_SYNC_ATTRS>   	readlinesreadinto
writelines	readinto1seektellflushwritepeekreadallreadlinetruncatereadread1_FILE_ASYNC_METHODSFileTFileT_coT)	covariantTT_coT_contra)contravariant	AnyStr_coAnyStr_contra)BufferProtocolc                   @     e Zd ZedddZdS )
_HasClosedreturnboolc                 C     d S N selfrK   rK   1usr/lib/python3.10/site-packages/trio/_file_io.pyr   h      z_HasClosed.closedNrG   rH   )__name__
__module____qualname__propertyr   rK   rK   rK   rN   rF   g       rF   c                   @  rE   )_HasEncodingrG   strc                 C  rI   rJ   rK   rL   rK   rK   rN   r'   l   rO   z_HasEncoding.encodingNrG   rW   )rQ   rR   rS   rT   r'   rK   rK   rK   rN   rV   k   rU   rV   c                   @  rE   )
_HasErrorsrG   
str | Nonec                 C  rI   rJ   rK   rL   rK   rK   rN   r#   p   rO   z_HasErrors.errorsN)rG   rZ   )rQ   rR   rS   rT   r#   rK   rK   rK   rN   rY   o   rU   rY   c                   @     e Zd ZdddZdS )
_HasFileNorG   intc                 C  rI   rJ   rK   rL   rK   rK   rN   r   t       z_HasFileNo.filenoNrG   r]   )rQ   rR   rS   r   rK   rK   rK   rN   r\   s       r\   c                   @  r[   )
_HasIsATTYrG   rH   c                 C  rI   rJ   rK   rL   rK   rK   rN   r   w   r^   z_HasIsATTY.isattyNrP   )rQ   rR   rS   r   rK   rK   rK   rN   ra   v   r`   ra   c                   @  rE   )_HasNewlinesrG   r>   c                 C  rI   rJ   rK   rL   rK   rK   rN   r   {   rO   z_HasNewlines.newlinesNrG   r>   )rQ   rR   rS   rT   r   rK   rK   rK   rN   rb   y   s    rb   c                   @  r[   )_HasReadablerG   rH   c                 C  rI   rJ   rK   rL   rK   rK   rN   r"      r^   z_HasReadable.readableNrP   )rQ   rR   rS   r"   rK   rK   rK   rN   rd   ~   r`   rd   c                   @  r[   )_HasSeekablerG   rH   c                 C  rI   rJ   rK   rL   rK   rK   rN   r      r^   z_HasSeekable.seekableNrP   )rQ   rR   rS   r   rK   rK   rK   rN   re      r`   re   c                   @  r[   )_HasWritablerG   rH   c                 C  rI   rJ   rK   rL   rK   rK   rN   r      r^   z_HasWritable.writableNrP   )rQ   rR   rS   r   rK   rK   rK   rN   rf      r`   rf   c                   @  rE   )
_HasBufferrG   r   c                 C  rI   rJ   rK   rL   rK   rK   rN   r$      rO   z_HasBuffer.bufferN)rG   r   )rQ   rR   rS   rT   r$   rK   rK   rK   rN   rg      rU   rg   c                   @  rE   )_HasRawrG   io.RawIOBasec                 C  rI   rJ   rK   rL   rK   rK   rN   r%      rO   z_HasRaw.rawN)rG   ri   )rQ   rR   rS   rT   r%   rK   rK   rK   rN   rh      rU   rh   c                   @  rE   )_HasLineBufferingrG   rH   c                 C  rI   rJ   rK   rL   rK   rK   rN   r&      rO   z _HasLineBuffering.line_bufferingNrP   )rQ   rR   rS   rT   r&   rK   rK   rK   rN   rj      rU   rj   c                   @  rE   )_HasCloseFDrG   rH   c                 C  rI   rJ   rK   rL   rK   rK   rN   r)      rO   z_HasCloseFD.closefdNrP   )rQ   rR   rS   rT   r)   rK   rK   rK   rN   rk      rU   rk   c                   @  rE   )_HasNamerG   rW   c                 C  rI   rJ   rK   rL   rK   rK   rN   r      rO   z_HasName.nameNrX   )rQ   rR   rS   rT   r   rK   rK   rK   rN   rl      rU   rl   c                   @  rE   )_HasModerG   rW   c                 C  rI   rJ   rK   rL   rK   rK   rN   r       rO   z_HasMode.modeNrX   )rQ   rR   rS   rT   r    rK   rK   rK   rN   rm      rU   rm   c                   @  r[   )_CanGetValuerG   rA   c                 C  rI   rJ   rK   rL   rK   rK   rN   r!      r^   z_CanGetValue.getvalueNrG   rA   )rQ   rR   rS   r!   rK   rK   rK   rN   rn      r`   rn   c                   @  r[   )_CanGetBufferrG   
memoryviewc                 C  rI   rJ   rK   rL   rK   rK   rN   r(      r^   z_CanGetBuffer.getbufferN)rG   rq   )rQ   rR   rS   r(   rK   rK   rK   rN   rp      r`   rp   c                   @  r[   )	_CanFlushrG   Nonec                 C  rI   rJ   rK   rL   rK   rK   rN   r1      r^   z_CanFlush.flushNrG   rs   )rQ   rR   rS   r1   rK   rK   rK   rN   rr      r`   rr   c                   @     e Zd Zd	d
ddZdS )_CanRead.size
int | NonerG   rA   c                C  rI   rJ   rK   rM   rw   rK   rK   rN   r7      r^   z_CanRead.readN.)rw   rx   rG   rA   )rQ   rR   rS   r7   rK   rK   rK   rN   rv          rv   c                   @  ru   )	_CanRead1.rw   rx   rG   bytesc                C  rI   rJ   rK   ry   rK   rK   rN   r8      r^   z_CanRead1.read1Nrz   )rw   rx   rG   r}   )rQ   rR   rS   r8   rK   rK   rK   rN   r|      r{   r|   c                   @  r[   )_CanReadAllrG   rA   c                 C  rI   rJ   rK   rL   rK   rK   rN   r4      r^   z_CanReadAll.readallNro   )rQ   rR   rS   r4   rK   rK   rK   rN   r~      r`   r~   c                   @     e Zd ZdddZdS )	_CanReadIntobufrC   rG   rx   c                C  rI   rJ   rK   rM   r   rK   rK   rN   r,      r^   z_CanReadInto.readintoN)r   rC   rG   rx   )rQ   rR   rS   r,   rK   rK   rK   rN   r      r`   r   c                   @  r   )	_CanReadInto1r$   rC   rG   r]   c                C  rI   rJ   rK   rM   r$   rK   rK   rN   r.      r^   z_CanReadInto1.readinto1N)r$   rC   rG   r]   )rQ   rR   rS   r.   rK   rK   rK   rN   r      r`   r   c                   @  ru   )_CanReadLine.rw   r]   rG   rA   c                C  rI   rJ   rK   ry   rK   rK   rN   r5      r^   z_CanReadLine.readlineNrz   rw   r]   rG   rA   )rQ   rR   rS   r5   rK   rK   rK   rN   r      r{   r   c                   @  ru   )_CanReadLines.hintr]   rG   list[AnyStr]c                 C  rI   rJ   rK   )rM   r   rK   rK   rN   r+      r^   z_CanReadLines.readlinesNrz   )r   r]   rG   r   )rQ   rR   rS   r+   rK   rK   rK   rN   r      r{   r   c                   @  ru   )_CanSeekr   targetr]   whencerG   c                C  rI   rJ   rK   rM   r   r   rK   rK   rN   r/      r^   z_CanSeek.seekNr   )r   r]   r   r]   rG   r]   )rQ   rR   rS   r/   rK   rK   rK   rN   r      r{   r   c                   @  r[   )_CanTellrG   r]   c                 C  rI   rJ   rK   rL   rK   rK   rN   r0      r^   z_CanTell.tellNr_   )rQ   rR   rS   r0   rK   rK   rK   rN   r      r`   r   c                   @  ru   )_CanTruncate.rw   rx   rG   r]   c                C  rI   rJ   rK   ry   rK   rK   rN   r6      r^   z_CanTruncate.truncateNrz   )rw   rx   rG   r]   )rQ   rR   rS   r6   rK   rK   rK   rN   r      r{   r   c                   @  r   )		_CanWritedatar?   rG   r]   c                C  rI   rJ   rK   rM   r   rK   rK   rN   r2      r^   z_CanWrite.writeN)r   r?   rG   r]   )rQ   rR   rS   r2   rK   rK   rK   rN   r      r`   r   c                   @  r   )	_CanWriteLineslinesIterable[T_contra]rG   rs   c                C  rI   rJ   rK   rM   r   rK   rK   rN   r-      r^   z_CanWriteLines.writelinesN)r   r   rG   rs   )rQ   rR   rS   r-   rK   rK   rK   rN   r          r   c                   @  ru   )_CanPeekr   rw   r]   rG   rA   c                C  rI   rJ   rK   ry   rK   rK   rN   r3      r^   z_CanPeek.peekNr   r   )rQ   rR   rS   r3   rK   rK   rK   rN   r      r{   r   c                   @  r[   )
_CanDetachrG   r>   c                 C  rI   rJ   rK   rL   rK   rK   rN   detach   r^   z_CanDetach.detachNrc   )rQ   rR   rS   r   rK   rK   rK   rN   r      r   r   c                   @  r[   )	_CanCloserG   rs   c                 C  rI   rJ   rK   rL   rK   rK   rN   close   r^   z_CanClose.closeNrt   )rQ   rR   rS   r   rK   rK   rK   rN   r      r`   r   c                      s  e Zd ZdZdddZeddd	ZesdddZd fddZ	dddZ
dddZdddZddd Zeredd#d$Zedd&d'Zedd*d+Zedd.d/Zedd2d3Zedd6d7Zedd:d;Zedd=d>Zedd@dAZeddCdDZddFdGZddIdJZddLdMZddOdPZddRdSZddUdVZddYdZZdd\d]ZdddbdcZ dddfdgZ!ddidjZ"ddndoZ#dddpdqZ$ddtduZ%dddzd{Z&dd}d~Z'ddddZ(dddZ)dddZ*dddZ+ddddZ,  Z-S   Z-S )AsyncIOWrapperaE  A generic :class:`~io.IOBase` wrapper that implements the :term:`asynchronous
    file object` interface. Wrapped methods that could block are executed in
    :meth:`trio.to_thread.run_sync`.

    All properties and methods defined in :mod:`~io` are exposed by this
    wrapper, if they exist in the wrapped file object.
    filer;   rG   rs   c                 C  s
   || _ d S rJ   _wrapped)rM   r   rK   rK   rN   __init__   s   
zAsyncIOWrapper.__init__c                 C  s   | j S )z.object: A reference to the wrapped file objectr   rL   rK   rK   rN   wrapped   s   zAsyncIOWrapper.wrappedr   rW   objectc                   s^   |t v r
t| j|S |tv r+t| j| t| j| jj| fdd}t| || |S t|)Nc                    s*   t  g| R i |}tj|I d H S rJ   )r   trio	to_threadrun_sync)argskwargsfuncmethrK   rN   wrapper   s   z+AsyncIOWrapper.__getattr__.<locals>.wrapper)r*   getattrr   r9   r   	__class__setattrAttributeError)rM   r   r   rK   r   rN   __getattr__   s   zAsyncIOWrapper.__getattr__Iterable[str]c                   sB   t t  }| fddtD  | fddtD  |S )Nc                 3       | ]}t  j|r|V  qd S rJ   hasattrr   .0arL   rK   rN   	<genexpr>      z)AsyncIOWrapper.__dir__.<locals>.<genexpr>c                 3  r   rJ   r   r   rL   rK   rN   r     r   )setsuper__dir__updater*   r9   )rM   attrsr   rL   rN   r      s   zAsyncIOWrapper.__dir__AsyncIOWrapper[FileT_co]c                 C  s   | S rJ   rK   rL   rK   rK   rN   	__aiter__  rO   zAsyncIOWrapper.__aiter__rM   $AsyncIOWrapper[_CanReadLine[AnyStr]]r   c                   s   |   I d H }|r|S trJ   )r5   StopAsyncIteration)rM   linerK   rK   rN   	__anext__  s
   zAsyncIOWrapper.__anext__AsyncIOWrapper[_CanDetach[T]]AsyncIOWrapper[T]c                   s    t j| jjI dH }t|S )zLike :meth:`io.BufferedIOBase.detach`, but async.

        This also re-wraps the result in a new :term:`asynchronous file object`
        wrapper.

        N)r   r   r   r   r   	wrap_file)rM   r%   rK   rK   rN   r     s   zAsyncIOWrapper.detachAsyncIOWrapper[_CanClose]c                   sX   t jdd t j| jjI dH  W d   n1 sw   Y  t j I dH  dS )zLike :meth:`io.IOBase.close`, but async.

        This is also shielded from cancellation; if a cancellation scope is
        cancelled, the wrapped file object will still be safely closed.

        T)ZshieldN)r   ZCancelScoper   r   r   r   ZlowlevelZcheckpoint_if_cancelledrL   rK   rK   rN   aclose  s
   	zAsyncIOWrapper.acloseAsyncIOWrapper[_HasClosed]rH   c                 C  rI   rJ   rK   rL   rK   rK   rN   r   +  rO   zAsyncIOWrapper.closedAsyncIOWrapper[_HasEncoding]c                 C  rI   rJ   rK   rL   rK   rK   rN   r'   -  rO   zAsyncIOWrapper.encodingAsyncIOWrapper[_HasErrors]rZ   c                 C  rI   rJ   rK   rL   rK   rK   rN   r#   /  rO   zAsyncIOWrapper.errorsAsyncIOWrapper[_HasNewlines[T]]r=   c                 C  rI   rJ   rK   rL   rK   rK   rN   r   1  rO   zAsyncIOWrapper.newlinesAsyncIOWrapper[_HasBuffer]r   c                 C  rI   rJ   rK   rL   rK   rK   rN   r$   3  rO   zAsyncIOWrapper.bufferAsyncIOWrapper[_HasRaw]ri   c                 C  rI   rJ   rK   rL   rK   rK   rN   r%   5  rO   zAsyncIOWrapper.raw!AsyncIOWrapper[_HasLineBuffering]r]   c                 C  rI   rJ   rK   rL   rK   rK   rN   r&   7  rO   zAsyncIOWrapper.line_bufferingAsyncIOWrapper[_HasCloseFD]c                 C  rI   rJ   rK   rL   rK   rK   rN   r)   9  rO   zAsyncIOWrapper.closefdAsyncIOWrapper[_HasName]c                 C  rI   rJ   rK   rL   rK   rK   rN   r   ;  rO   zAsyncIOWrapper.nameAsyncIOWrapper[_HasMode]c                 C  rI   rJ   rK   rL   rK   rK   rN   r    =  rO   zAsyncIOWrapper.modeAsyncIOWrapper[_HasFileNo]c                 C  rI   rJ   rK   rL   rK   rK   rN   r   @  r^   zAsyncIOWrapper.filenoAsyncIOWrapper[_HasIsATTY]c                 C  rI   rJ   rK   rL   rK   rK   rN   r   A  r^   zAsyncIOWrapper.isattyAsyncIOWrapper[_HasReadable]c                 C  rI   rJ   rK   rL   rK   rK   rN   r"   B  r^   zAsyncIOWrapper.readableAsyncIOWrapper[_HasSeekable]c                 C  rI   rJ   rK   rL   rK   rK   rN   r   C  r^   zAsyncIOWrapper.seekableAsyncIOWrapper[_HasWritable]c                 C  rI   rJ   rK   rL   rK   rK   rN   r   D  r^   zAsyncIOWrapper.writable$AsyncIOWrapper[_CanGetValue[AnyStr]]c                 C  rI   rJ   rK   rL   rK   rK   rN   r!   E  r^   zAsyncIOWrapper.getvalueAsyncIOWrapper[_CanGetBuffer]rq   c                 C  rI   rJ   rK   rL   rK   rK   rN   r(   F  r^   zAsyncIOWrapper.getbufferAsyncIOWrapper[_CanFlush]c                      d S rJ   rK   rL   rK   rK   rN   r1   G      zAsyncIOWrapper.flush AsyncIOWrapper[_CanRead[AnyStr]]rw   rx   c                  r   rJ   rK   ry   rK   rK   rN   r7   H  r   zAsyncIOWrapper.readAsyncIOWrapper[_CanRead1]r}   c                  r   rJ   rK   ry   rK   rK   rN   r8   I  r   zAsyncIOWrapper.read1#AsyncIOWrapper[_CanReadAll[AnyStr]]c                   r   rJ   rK   rL   rK   rK   rN   r4   J  r   zAsyncIOWrapper.readallAsyncIOWrapper[_CanReadInto]r   rC   c                  r   rJ   rK   r   rK   rK   rN   r,   K  r   zAsyncIOWrapper.readintoc                  r   rJ   rK   ry   rK   rK   rN   r5   L  r   zAsyncIOWrapper.readline%AsyncIOWrapper[_CanReadLines[AnyStr]]r   c                   r   rJ   rK   rL   rK   rK   rN   r+   M  r   zAsyncIOWrapper.readlinesr   AsyncIOWrapper[_CanSeek]r   r   c                  r   rJ   rK   r   rK   rK   rN   r/   N  r   zAsyncIOWrapper.seekAsyncIOWrapper[_CanTell]c                   r   rJ   rK   rL   rK   rK   rN   r0   O  r   zAsyncIOWrapper.tellNAsyncIOWrapper[_CanTruncate]c                  r   rJ   rK   ry   rK   rK   rN   r6   P  r   zAsyncIOWrapper.truncateAsyncIOWrapper[_CanWrite[T]]r   c                  r   rJ   rK   r   rK   rK   rN   r2   Q  r   zAsyncIOWrapper.write!AsyncIOWrapper[_CanWriteLines[T]]r   Iterable[T]c                  r   rJ   rK   r   rK   rK   rN   r-   R  r   zAsyncIOWrapper.writelinesAsyncIOWrapper[_CanReadInto1]r$   c                  r   rJ   rK   r   rK   rK   rN   r.   S  r   zAsyncIOWrapper.readinto1 AsyncIOWrapper[_CanPeek[AnyStr]]c                  r   rJ   rK   ry   rK   rK   rN   r3   T  r   zAsyncIOWrapper.peek)r   r;   rG   rs   )rG   r;   )r   rW   rG   r   )rG   r   )rG   r   )rM   r   rG   r   )rM   r   rG   r   )rM   r   rG   rs   )rM   r   rG   rH   )rM   r   rG   rW   )rM   r   rG   rZ   )rM   r   rG   r=   )rM   r   rG   r   )rM   r   rG   ri   )rM   r   rG   r]   )rM   r   rG   rH   )rM   r   rG   rW   )rM   r   rG   rW   )rM   r   rG   r]   )rM   r   rG   rH   )rM   r   rG   rH   )rM   r   rG   rH   )rM   r   rG   rH   )rM   r   rG   r   )rM   r   rG   rq   )rM   r   rG   rs   )r   )rM   r   rw   rx   rG   r   )rM   r   rw   rx   rG   r}   )rM   r   rG   r   )rM   r   r   rC   rG   rx   )rM   r   rw   r]   rG   r   )rM   r   rG   r   r   )rM   r   r   r]   r   r]   rG   r]   )rM   r   rG   r]   rJ   )rM   r   rw   rx   rG   r]   )rM   r   r   r=   rG   r]   )rM   r   r   r   rG   rs   )rM   r   r$   rC   rG   r]   )rM   r   rw   r]   rG   r   ).rQ   rR   rS   __doc__r   rT   r   r   r   r   r   r   r   r   r   r'   r#   r   r$   r%   r&   r)   r   r    r   r   r"   r   r   r!   r(   r1   r7   r8   r4   r,   r5   r+   r/   r0   r6   r2   r-   r.   r3   __classcell__rK   rK   r   rN   r      sn    




















r   r   rr   r   	_OpenFiler    r   	bufferingr]   r'   rZ   r#   newliner)   rH   opener_Opener | NonerG    AsyncIOWrapper[io.TextIOWrapper]c                   r   rJ   rK   r   r    r   r'   r#   r   r)   r   rK   rK   rN   	open_file\     r   r   
Literal[0]rs   AsyncIOWrapper[io.FileIO]c                   r   rJ   rK   r   rK   rK   rN   r   j  r   r   Literal[-1, 1]!AsyncIOWrapper[io.BufferedRandom]c                   r   rJ   rK   r   rK   rK   rN   r   x  r   r   !AsyncIOWrapper[io.BufferedWriter]c                   r   rJ   rK   r   rK   rK   rN   r     r   r   !AsyncIOWrapper[io.BufferedReader]c                   r   rJ   rK   r   rK   rK   rN   r     r   AsyncIOWrapper[BinaryIO]c                   r   rJ   rK   r   rK   rK   rN   r     r   rW   AsyncIOWrapper[IO[Any]]c                   r   rJ   rK   r   rK   rK   rN   r     r   AsyncIOWrapper[Any]c           	        s.   t tjtj| |||||||	I dH }|S )a(  Asynchronous version of :func:`open`.

    Returns:
        An :term:`asynchronous file object`

    Example::

        async with await trio.open_file(filename) as f:
            async for line in f:
                pass

        assert f.closed

    See also:
      :func:`trio.Path.open`

    N)r   r   r   r   ioopen)	r   r    r   r'   r#   r   r)   r   _filerK   rK   rN   r     s   AsyncIOWrapper[FileT]c                   s<   d fdd}|dr|ds|d	st   d
t S )a[  This wraps any file object in a wrapper that provides an asynchronous
    file object interface.

    Args:
        file: a :term:`file object`

    Returns:
        An :term:`asynchronous file object` that wraps ``file``

    Example::

        async_file = trio.wrap_file(StringIO('asdf'))

        assert await async_file.read() == 'asdf'

    attrrW   rG   rH   c                   s   t  | ott | S rJ   )r   callabler   )r  r   rK   rN   has  s   zwrap_file.<locals>.hasr   r7   r2   zI does not implement required duck-file methods: close and (read or write)N)r  rW   rG   rH   )	TypeErrorr   )r   r  rK   r
  rN   r     s   r   )r   r   NNNTN)r   r   r    r   r   r]   r'   rZ   r#   rZ   r   rZ   r)   rH   r   r   rG   r   )NNNTN)r   r   r    r   r   r   r'   rs   r#   rs   r   rs   r)   rH   r   r   rG   r   )r   NNNTN)r   r   r    r   r   r   r'   rs   r#   rs   r   rs   r)   rH   r   r   rG   r   )r   r   r    r   r   r   r'   rs   r#   rs   r   rs   r)   rH   r   r   rG   r   )r   r   r    r   r   r   r'   rs   r#   rs   r   rs   r)   rH   r   r   rG   r   )r   r   r    r   r   r]   r'   rs   r#   rs   r   rs   r)   rH   r   r   rG   r  )r   r   r    rW   r   r]   r'   rZ   r#   rZ   r   rZ   r)   rH   r   r   rG   r  )r   r   r    rW   r   r]   r'   rZ   r#   rZ   r   rZ   r)   rH   r   r   rG   r  )r   r:   rG   r  )T
__future__r   r  	functoolsr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   Z_utilr   abcr   Z	_typeshedr   r   r   r   r   r   typing_extensionsr   r*   __annotations__r9   r:   r;   r=   r>   r?   rW   r}   rA   rB   rC   rD   rF   rV   rY   r\   ra   rb   rd   re   rf   rg   rh   rj   rk   rl   rm   rn   rp   rr   rv   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   r   Z_Openerr   r   rK   rK   rK   rN   <module>   s    4 ~#