o
    wZh                     @   sj   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 dgZ
edG dd de	eeef  Zd	S )
    )Iterator)IOBase)Optional)functional_datapipe)IterDataPipeStreamReaderIterDataPipeZread_from_streamc                   @   sP   e Zd ZdZ	d
deeeef  dee	 fddZ
deeeef  fdd	ZdS )r   a  
    Given IO streams and their label names, yield bytes with label name as tuple.

    (functional name: ``read_from_stream``).

    Args:
        datapipe: Iterable DataPipe provides label/URL and byte stream
        chunk: Number of bytes to be read from stream per iteration.
            If ``None``, all bytes will be read until the EOF.

    Example:
        >>> # xdoctest: +SKIP
        >>> from torchdata.datapipes.iter import IterableWrapper, StreamReader
        >>> from io import StringIO
        >>> dp = IterableWrapper([("alphabet", StringIO("abcde"))])
        >>> list(StreamReader(dp, chunk=1))
        [('alphabet', 'a'), ('alphabet', 'b'), ('alphabet', 'c'), ('alphabet', 'd'), ('alphabet', 'e')]
    Ndatapipechunkc                 C   s   || _ || _d S N)r   r	   )selfr   r	    r   [/var/www/auris/lib/python3.10/site-packages/torch/utils/data/datapipes/iter/streamreader.py__init__!   s   
z!StreamReaderIterDataPipe.__init__returnc                 c   s>    | j D ]\}}	 || j}|s|  n||fV  q	qd S r
   )r   readr	   close)r   Zfurlstreamdr   r   r   __iter__'   s   
z!StreamReaderIterDataPipe.__iter__r
   )__name__
__module____qualname____doc__r   tuplestrr   r   intr   r   bytesr   r   r   r   r   r      s    
N)collections.abcr   ior   typingr   Z%torch.utils.data.datapipes._decoratorr   Z#torch.utils.data.datapipes.datapiper   __all__r   r   r   r   r   r   r   r   <module>   s    "