U
    gN<                     @  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rd dlmZmZmZmZmZmZ d d	lmZ d
ddddddddddddddddhZde d< dddd d!d"d#d$d%d&d'd(d)d*hZ!de d+< ed,Z"ed-d.d/Z#ed0Z$ed1d.d/Z%ed2d.d3Z&ed4e'e(d.d/Z)ed5e'e(d.d3Z*erd d6lm+Z+m,Z, G d7d8 d8e,Z-G d9d: d:e,Z.G d;d< d<e,Z/G d=d> d>e,Z0G d?d@ d@e,Z1G dAdB dBe,e% Z2G dCdD dDe,Z3G dEdF dFe,Z4G dGdH dHe,Z5G dIdJ dJe,Z6G dKdL dLe,Z7G dMdN dNe,Z8G dOdP dPe,Z9G dQdR dRe,Z:G dSdT dTe,Z;G dUdV dVe,e) Z<G dWdX dXe,Z=G dYdZ dZe,Z>G d[d\ d\e,e) Z?G d]d^ d^e,Z@G d_d` d`e,e) ZAG dadb dbe,ZBG dcdd dde,ZCG dedf dfe,e) ZDG dgdh dhe,e	 ZEG didj dje,ZFG dkdl dle,ZGG dmdn dne,ZHG dodp dpe,e& ZIG dqdr dre,e& ZJG dsdt dte,e) ZKG dudv dve,e% ZLG dwdx dxe,ZMG dydz dzeee# ZNed{eOf ZPee'eOgeOf ZQedd~ddddddddd	ddZRedd~ddddddddd	ddZRedd~ddddddddd	ddZRedd~ddddddddd	ddZRedd~ddddddddd	ddZRedd~ddddddddd	ddZRedd~ddddddddd	ddZRdd~ddddddddd	ddZRd,dddd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encodingerrorsfilenoisattynewlinesreadableseekablewritablebufferrawline_bufferingclosefdnamemodegetvalue	getbufferzset[str]_FILE_SYNC_ATTRSflushreadread1readallreadintoreadline	readlinesseektelltruncatewrite
writelines	readinto1peek_FILE_ASYNC_METHODSFileTFileT_coT)	covariantTT_coT_contra)contravariant	AnyStr_coAnyStr_contra)BufferProtocolc                   @  s   e Zd ZeddddZdS )
_HasClosedboolreturnc                 C  s   d S N selfrJ   rJ   1/tmp/pip-unpacked-wheel-ks04xdmi/trio/_file_io.pyr   h   s    z_HasClosed.closedN)__name__
__module____qualname__propertyr   rJ   rJ   rJ   rM   rE   g   s   rE   c                   @  s   e Zd ZeddddZdS )_HasEncodingstrrG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   l   s    z_HasEncoding.encodingN)rN   rO   rP   rQ   r   rJ   rJ   rJ   rM   rR   k   s   rR   c                   @  s   e Zd ZeddddZdS )
_HasErrors
str | NonerG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   p   s    z_HasErrors.errorsN)rN   rO   rP   rQ   r   rJ   rJ   rJ   rM   rT   o   s   rT   c                   @  s   e Zd ZddddZdS )
_HasFileNointrG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   t       z_HasFileNo.filenoN)rN   rO   rP   r   rJ   rJ   rJ   rM   rV   s   s   rV   c                   @  s   e Zd ZddddZdS )
_HasIsATTYrF   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   w   rX   z_HasIsATTY.isattyN)rN   rO   rP   r   rJ   rJ   rJ   rM   rY   v   s   rY   c                   @  s   e Zd ZeddddZdS )_HasNewlinesr>   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   {   s    z_HasNewlines.newlinesN)rN   rO   rP   rQ   r   rJ   rJ   rJ   rM   rZ   y   s   rZ   c                   @  s   e Zd ZddddZdS )_HasReadablerF   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r      rX   z_HasReadable.readableN)rN   rO   rP   r   rJ   rJ   rJ   rM   r[   ~   s   r[   c                   @  s   e Zd ZddddZdS )_HasSeekablerF   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r       rX   z_HasSeekable.seekableN)rN   rO   rP   r    rJ   rJ   rJ   rM   r\      s   r\   c                   @  s   e Zd ZddddZdS )_HasWritablerF   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r!      rX   z_HasWritable.writableN)rN   rO   rP   r!   rJ   rJ   rJ   rM   r]      s   r]   c                   @  s   e Zd ZeddddZdS )
_HasBufferr   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r"      s    z_HasBuffer.bufferN)rN   rO   rP   rQ   r"   rJ   rJ   rJ   rM   r^      s   r^   c                   @  s   e Zd ZeddddZdS )_HasRawio.RawIOBaserG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r#      s    z_HasRaw.rawN)rN   rO   rP   rQ   r#   rJ   rJ   rJ   rM   r_      s   r_   c                   @  s   e Zd ZeddddZdS )_HasLineBufferingrF   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r$      s    z _HasLineBuffering.line_bufferingN)rN   rO   rP   rQ   r$   rJ   rJ   rJ   rM   ra      s   ra   c                   @  s   e Zd ZeddddZdS )_HasCloseFDrF   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r%      s    z_HasCloseFD.closefdN)rN   rO   rP   rQ   r%   rJ   rJ   rJ   rM   rb      s   rb   c                   @  s   e Zd ZeddddZdS )_HasNamerS   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r&      s    z_HasName.nameN)rN   rO   rP   rQ   r&   rJ   rJ   rJ   rM   rc      s   rc   c                   @  s   e Zd ZeddddZdS )_HasModerS   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r'      s    z_HasMode.modeN)rN   rO   rP   rQ   r'   rJ   rJ   rJ   rM   rd      s   rd   c                   @  s   e Zd ZddddZdS )_CanGetValuerA   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r(      rX   z_CanGetValue.getvalueN)rN   rO   rP   r(   rJ   rJ   rJ   rM   re      s   re   c                   @  s   e Zd ZddddZdS )_CanGetBuffer
memoryviewrG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r)      rX   z_CanGetBuffer.getbufferN)rN   rO   rP   r)   rJ   rJ   rJ   rM   rf      s   rf   c                   @  s   e Zd ZddddZdS )	_CanFlushNonerG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r+      rX   z_CanFlush.flushN)rN   rO   rP   r+   rJ   rJ   rJ   rM   rh      s   rh   c                   @  s   e Zd ZddddddZdS )	_CanRead.
int | NonerA   sizerH   c                C  s   d S rI   rJ   rL   rm   rJ   rJ   rM   r,      rX   z_CanRead.readN).)rN   rO   rP   r,   rJ   rJ   rJ   rM   rj      s   rj   c                   @  s   e Zd ZddddddZdS )		_CanRead1.rk   bytesrl   c                C  s   d S rI   rJ   rn   rJ   rJ   rM   r-      rX   z_CanRead1.read1N).)rN   rO   rP   r-   rJ   rJ   rJ   rM   ro      s   ro   c                   @  s   e Zd ZddddZdS )_CanReadAllrA   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r.      rX   z_CanReadAll.readallN)rN   rO   rP   r.   rJ   rJ   rJ   rM   rq      s   rq   c                   @  s   e Zd ZdddddZdS )_CanReadIntorC   rk   )bufrH   c                C  s   d S rI   rJ   rL   rs   rJ   rJ   rM   r/      rX   z_CanReadInto.readintoN)rN   rO   rP   r/   rJ   rJ   rJ   rM   rr      s   rr   c                   @  s   e Zd ZdddddZdS )_CanReadInto1rC   rW   )r"   rH   c                C  s   d S rI   rJ   rL   r"   rJ   rJ   rM   r7      rX   z_CanReadInto1.readinto1N)rN   rO   rP   r7   rJ   rJ   rJ   rM   ru      s   ru   c                   @  s   e Zd ZddddddZdS )	_CanReadLine.rW   rA   rl   c                C  s   d S rI   rJ   rn   rJ   rJ   rM   r0      rX   z_CanReadLine.readlineN).)rN   rO   rP   r0   rJ   rJ   rJ   rM   rw      s   rw   c                   @  s   e Zd ZddddddZdS )	_CanReadLines.rW   list[AnyStr])hintrH   c                C  s   d S rI   rJ   )rL   rz   rJ   rJ   rM   r1      rX   z_CanReadLines.readlinesN).)rN   rO   rP   r1   rJ   rJ   rJ   rM   rx      s   rx   c                   @  s    e Zd ZdddddddZdS )_CanSeekr   rW   )targetwhencerH   c                C  s   d S rI   rJ   rL   r|   r}   rJ   rJ   rM   r2      rX   z_CanSeek.seekN)r   )rN   rO   rP   r2   rJ   rJ   rJ   rM   r{      s   r{   c                   @  s   e Zd ZddddZdS )_CanTellrW   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r3      rX   z_CanTell.tellN)rN   rO   rP   r3   rJ   rJ   rJ   rM   r      s   r   c                   @  s   e Zd ZddddddZdS )	_CanTruncate.rk   rW   rl   c                C  s   d S rI   rJ   rn   rJ   rJ   rM   r4      rX   z_CanTruncate.truncateN).)rN   rO   rP   r4   rJ   rJ   rJ   rM   r      s   r   c                   @  s   e Zd ZdddddZdS )	_CanWriter?   rW   )datarH   c                C  s   d S rI   rJ   rL   r   rJ   rJ   rM   r5      rX   z_CanWrite.writeN)rN   rO   rP   r5   rJ   rJ   rJ   rM   r      s   r   c                   @  s   e Zd ZdddddZdS )_CanWriteLineszIterable[T_contra]ri   )linesrH   c                C  s   d S rI   rJ   rL   r   rJ   rJ   rM   r6      rX   z_CanWriteLines.writelinesN)rN   rO   rP   r6   rJ   rJ   rJ   rM   r      s   r   c                   @  s   e Zd ZddddddZdS )	_CanPeekr   rW   rA   rl   c                C  s   d S rI   rJ   rn   rJ   rJ   rM   r8      rX   z_CanPeek.peekN)r   )rN   rO   rP   r8   rJ   rJ   rJ   rM   r      s   r   c                   @  s   e Zd ZddddZdS )
_CanDetachr>   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   detach   rX   z_CanDetach.detachN)rN   rO   rP   r   rJ   rJ   rJ   rM   r      s   r   c                   @  s   e Zd ZddddZdS )	_CanCloseri   rG   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   close   rX   z_CanClose.closeN)rN   rO   rP   r   rJ   rJ   rJ   rM   r      s   r   c                      s  e Zd ZdZdddddZedddd	ZesBd
ddddZdd fddZ	ddddZ
dddddZdddddZddddd Zered!d"dd#d$Zed%d
dd&d'Zed(d)dd*d+Zed,d-dd.d/Zed0d1dd2d3Zed4d5dd6d7Zed8d9dd:d;Zed<d"dd=d>Zed?d
dd@dAZedBd
ddCdDZdEd9ddFdGZdHd"ddIdJZdKd"ddLdMZdNd"ddOdPZdQd"ddRdSZdTdddUdVZdWdXddYdZZd[ddd\d]Zdd_d`ddadbdcZ dddd`dedadfdgZ!dhdddidjZ"dkdld`dmdndoZ#ddd9ddadpdqZ$drdsddtduZ%ddwd9d9d9dxdydzZ&d{d9dd|d}Z'ddd`d9daddZ(dd-d9dddZ)ddddddZ*ddld9dddZ+ddd9ddaddZ,  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.
    r;   ri   filerH   c                 C  s
   || _ d S rI   _wrapped)rL   r   rJ   rJ   rM   __init__   s    zAsyncIOWrapper.__init__rG   c                 C  s   | j S )z.object: A reference to the wrapped file objectr   rK   rJ   rJ   rM   wrapped   s    zAsyncIOWrapper.wrappedrS   object)r&   rH   c                   sb   |t krt| j|S |tkrVt| j| t| j| jj| fdd}t| || |S t|d S )Nc                    s"   t  f| |}tj|I d H S rI   )r   trio	to_threadrun_sync)argskwargsfuncmethrJ   rM   wrapper   s    z+AsyncIOWrapper.__getattr__.<locals>.wrapper)r*   getattrr   r9   r   	__class__setattrAttributeError)rL   r&   r   rJ   r   rM   __getattr__   s    zAsyncIOWrapper.__getattr__zIterable[str]c                   sB   t t  }| fddtD  | fddtD  |S )Nc                 3  s   | ]}t  j|r|V  qd S rI   hasattrr   .0arK   rJ   rM   	<genexpr>  s      z)AsyncIOWrapper.__dir__.<locals>.<genexpr>c                 3  s   | ]}t  j|r|V  qd S rI   r   r   rK   rJ   rM   r     s      )setsuper__dir__updater*   r9   )rL   attrsr   rK   rM   r      s    zAsyncIOWrapper.__dir__zAsyncIOWrapper[FileT_co]c                 C  s   | S rI   rJ   rK   rJ   rJ   rM   	__aiter__  s    zAsyncIOWrapper.__aiter__z$AsyncIOWrapper[_CanReadLine[AnyStr]]r   )rL   rH   c                   s   |   I d H }|r|S td S rI   )r0   StopAsyncIteration)rL   linerJ   rJ   rM   	__anext__  s    zAsyncIOWrapper.__anext__zAsyncIOWrapper[_CanDetach[T]]z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)rL   r#   rJ   rJ   rM   r     s    zAsyncIOWrapper.detachzAsyncIOWrapper[_CanClose]c              	     sB   t jdd t j| jjI dH  W 5 Q R X 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_cancelledrK   rJ   rJ   rM   aclose  s    	 zAsyncIOWrapper.aclosezAsyncIOWrapper[_HasClosed]rF   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   +  s    zAsyncIOWrapper.closedzAsyncIOWrapper[_HasEncoding]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   -  s    zAsyncIOWrapper.encodingzAsyncIOWrapper[_HasErrors]rU   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   /  s    zAsyncIOWrapper.errorszAsyncIOWrapper[_HasNewlines[T]]r=   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   1  s    zAsyncIOWrapper.newlineszAsyncIOWrapper[_HasBuffer]r   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r"   3  s    zAsyncIOWrapper.bufferzAsyncIOWrapper[_HasRaw]r`   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r#   5  s    zAsyncIOWrapper.rawz!AsyncIOWrapper[_HasLineBuffering]rW   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r$   7  s    zAsyncIOWrapper.line_bufferingzAsyncIOWrapper[_HasCloseFD]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r%   9  s    zAsyncIOWrapper.closefdzAsyncIOWrapper[_HasName]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r&   ;  s    zAsyncIOWrapper.namezAsyncIOWrapper[_HasMode]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r'   =  s    zAsyncIOWrapper.modezAsyncIOWrapper[_HasFileNo]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   @  rX   zAsyncIOWrapper.filenozAsyncIOWrapper[_HasIsATTY]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   A  rX   zAsyncIOWrapper.isattyzAsyncIOWrapper[_HasReadable]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r   B  rX   zAsyncIOWrapper.readablezAsyncIOWrapper[_HasSeekable]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r    C  rX   zAsyncIOWrapper.seekablezAsyncIOWrapper[_HasWritable]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r!   D  rX   zAsyncIOWrapper.writablez$AsyncIOWrapper[_CanGetValue[AnyStr]]c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r(   E  rX   zAsyncIOWrapper.getvaluezAsyncIOWrapper[_CanGetBuffer]rg   c                 C  s   d S rI   rJ   rK   rJ   rJ   rM   r)   F  rX   zAsyncIOWrapper.getbufferzAsyncIOWrapper[_CanFlush]c                   s   d S rI   rJ   rK   rJ   rJ   rM   r+   G  rX   zAsyncIOWrapper.flushz AsyncIOWrapper[_CanRead[AnyStr]]rk   )rL   rm   rH   c                  s   d S rI   rJ   rn   rJ   rJ   rM   r,   H  rX   zAsyncIOWrapper.readzAsyncIOWrapper[_CanRead1]rp   c                  s   d S rI   rJ   rn   rJ   rJ   rM   r-   I  rX   zAsyncIOWrapper.read1z#AsyncIOWrapper[_CanReadAll[AnyStr]]c                   s   d S rI   rJ   rK   rJ   rJ   rM   r.   J  rX   zAsyncIOWrapper.readallzAsyncIOWrapper[_CanReadInto]rC   )rL   rs   rH   c                  s   d S rI   rJ   rt   rJ   rJ   rM   r/   K  rX   zAsyncIOWrapper.readintoc                  s   d S rI   rJ   rn   rJ   rJ   rM   r0   L  rX   zAsyncIOWrapper.readlinez%AsyncIOWrapper[_CanReadLines[AnyStr]]ry   c                   s   d S rI   rJ   rK   rJ   rJ   rM   r1   M  rX   zAsyncIOWrapper.readlinesr   zAsyncIOWrapper[_CanSeek])rL   r|   r}   rH   c                  s   d S rI   rJ   r~   rJ   rJ   rM   r2   N  rX   zAsyncIOWrapper.seekzAsyncIOWrapper[_CanTell]c                   s   d S rI   rJ   rK   rJ   rJ   rM   r3   O  rX   zAsyncIOWrapper.tellNzAsyncIOWrapper[_CanTruncate]c                  s   d S rI   rJ   rn   rJ   rJ   rM   r4   P  rX   zAsyncIOWrapper.truncatezAsyncIOWrapper[_CanWrite[T]])rL   r   rH   c                  s   d S rI   rJ   r   rJ   rJ   rM   r5   Q  rX   zAsyncIOWrapper.writez!AsyncIOWrapper[_CanWriteLines[T]]zIterable[T])rL   r   rH   c                  s   d S rI   rJ   r   rJ   rJ   rM   r6   R  rX   zAsyncIOWrapper.writelineszAsyncIOWrapper[_CanReadInto1])rL   r"   rH   c                  s   d S rI   rJ   rv   rJ   rJ   rM   r7   S  rX   zAsyncIOWrapper.readinto1z AsyncIOWrapper[_CanPeek[AnyStr]]c                  s   d S rI   rJ   rn   rJ   rJ   rM   r8   T  rX   zAsyncIOWrapper.peek)r   )r   )r   )r   )N)r   ).rN   rO   rP   __doc__r   rQ   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)   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   __classcell__rJ   rJ   r   rM   r      sj   r   r   rr   	_OpenFiler   rW   rU   rF   z_Opener | Nonez AsyncIOWrapper[io.TextIOWrapper])	r   r'   	bufferingr   r   newliner%   openerrH   c                   s   d S rI   rJ   r   r'   r   r   r   r   r%   r   rJ   rJ   rM   	open_file\  s    
r   r   z
Literal[0]ri   zAsyncIOWrapper[io.FileIO]c                   s   d S rI   rJ   r   rJ   rJ   rM   r   i  s    
r   zLiteral[(-1, 1)]z!AsyncIOWrapper[io.BufferedRandom]c                   s   d S rI   rJ   r   rJ   rJ   rM   r   v  s    
r   z!AsyncIOWrapper[io.BufferedWriter]c                   s   d S rI   rJ   r   rJ   rJ   rM   r     s    
r   z!AsyncIOWrapper[io.BufferedReader]c                   s   d S rI   rJ   r   rJ   rJ   rM   r     s    
zAsyncIOWrapper[BinaryIO]c                   s   d S rI   rJ   r   rJ   rJ   rM   r     s    
rS   zAsyncIOWrapper[IO[Any]]c                   s   d S rI   rJ   r   rJ   rJ   rM   r     s    
z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   _filerJ   rJ   rM   r     s    zAsyncIOWrapper[FileT]r   c                   sB   dd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'

    rS   rF   )attrrH   c                   s   t  | ott | S rI   )r   callabler   )r   r   rJ   rM   has  s    zwrap_file.<locals>.hasr   r,   r5   zI does not implement required duck-file methods: close and (read or write))	TypeErrorr   )r   r   rJ   r   rM   r     s    r   )r   r   NNNTN)NNNTN)r   NNNTN)r   NNNTN)r   NNNTN)NNNTN)r   NNNTN)r   r   NNNTN)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   Ztyping_extensionsr   r*   __annotations__r9   r:   r;   r=   r>   r?   rS   rp   rA   rB   rC   rD   rE   rR   rT   rV   rY   rZ   r[   r\   r]   r^   r_   ra   rb   rc   rd   re   rf   rh   rj   ro   rq   rr   ru   rw   rx   r{   r   r   r   r   r   r   r   r   rW   r   Z_Openerr   r   rJ   rJ   rJ   rM   <module>   s0   4 ~       "     "      "      "      "     "      "        +