
    Ǆg
              	           d dl mZ d dlmZmZ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e	eeef                   Zy	)
    )IOBase)IterableOptionalTuple)functional_datapipe)IterDataPipe) get_file_binaries_from_pathnamesFileOpenerIterDataPipe
open_filesc            	       T     e Zd ZdZ	 	 	 d	dee   dedee   def fdZd Z	d Z
 xZS )
r
   aH  
    Given pathnames, opens files and yield pathname and file stream in a tuple (functional name: ``open_files``).

    Args:
        datapipe: Iterable datapipe that provides pathnames
        mode: An optional string that specifies the mode in which
            the file is opened by ``open()``. It defaults to ``r``, other options are
            ``b`` for reading in binary mode and ``t`` for text mode.
        encoding: An optional string that specifies the encoding of the
            underlying file. It defaults to ``None`` to match the default encoding of ``open``.
        length: Nominal length of the datapipe

    Note:
        The opened file handles will be closed by Python's GC periodically. Users can choose
        to close them explicitly.

    Example:
        >>> # xdoctest: +SKIP
        >>> from torchdata.datapipes.iter import FileLister, FileOpener, StreamReader
        >>> dp = FileLister(root=".").filter(lambda fname: fname.endswith('.txt'))
        >>> dp = FileOpener(dp)
        >>> dp = StreamReader(dp)
        >>> list(dp)
        [('./abc.txt', 'abc')]
    datapipemodeencodinglengthc                     t         |           || _        || _        || _        | j                  dvrt        d|       d|v r|t        d      || _        y )N)btrbrtrzInvalid mode r   z-binary mode doesn't take an encoding argument)super__init__r   r   r   
ValueErrorr   )selfr   r   r   r   	__class__s        r/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/torch/utils/data/datapipes/iter/fileopener.pyr   zFileOpenerIterDataPipe.__init__+   se     	"*	'/9977}TF344 $;8/LMM!    c              #   v   K   t        | j                  | j                  | j                        E d {    y 7 w)N)r	   r   r   r   r   s    r   __iter__zFileOpenerIterDataPipe.__iter__D   s+     3MM499dmm
 	
 	
s   /979c                 z    | j                   dk(  r!t        t        |       j                   d      | j                   S )Nz# instance doesn't have valid length)r   	TypeErrortype__name__r   s    r   __len__zFileOpenerIterDataPipe.__len__I   s6    ;;"tDz2233VWXX{{r   )r   Nr"   )r%   
__module____qualname____doc__r   strr   intr   r    r&   __classcell__)r   s   @r   r
   r
      sP    : "&"3-" " 3-	"
 "2

r   N)ior   typingr   r   r   %torch.utils.data.datapipes._decoratorr   #torch.utils.data.datapipes.datapiper   'torch.utils.data.datapipes.utils.commonr	   __all__r*   r
    r   r   <module>r4      sQ     , , E < T 
 \"<\%V*<= < #<r   