
    pi                     r    d dl Z d dlZd dlmZmZmZ d dlmZ d dlm	Z	  ed      Z
dgZ G d de	e
         Zy)    N)IterableIteratorSized)TypeVar)IterDataPipe_TIterableWrapperIterDataPipec                   J    e Zd ZdZd	dee   deddfdZdee   fdZ	de
fdZy)
r	   a  
    Wraps an iterable object to create an IterDataPipe.

    Args:
        iterable: Iterable object to be wrapped into an IterDataPipe
        deepcopy: Option to deepcopy input iterable object for each
            iterator. The copy is made when the first element is read in ``iter()``.

    .. note::
        If ``deepcopy`` is explicitly set to ``False``, users should ensure
        that the data pipeline doesn't contain any in-place operations over
        the iterable instance to prevent data inconsistency across iterations.

    Example:
        >>> # xdoctest: +SKIP
        >>> from torchdata.datapipes.iter import IterableWrapper
        >>> dp = IterableWrapper(range(10))
        >>> list(dp)
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    iterabledeepcopyreturnNc                      || _         || _        y )N)r   r   )selfr   r   s      g/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/torch/utils/data/datapipes/iter/utils.py__init__z$IterableWrapperIterDataPipe.__init__$   s          c              #      K   | j                   }| j                  r 	 t        j                  | j                         }|E d {    y # t        $ r t	        j
                  d       Y +w xY w7 )w)NzlThe input iterable can not be deepcopied, please be aware of in-place modification would affect source data.)r   r   copy	TypeErrorwarningswarn)r   source_datas     r   __iter__z$IterableWrapperIterDataPipe.__iter__(   s`     mm==
"mmDMM:   Y
 	s3   A,A A, A*A,A'$A,&A''A,c                     t        | j                  t              rt        | j                        S t	        t        |       j                   d      )Nz# instance doesn't have valid length)
isinstancer   r   lenr   type__name__)r   s    r   __len__z#IterableWrapperIterDataPipe.__len__8   s=    dmmU+t}}%%4:..//RSTTr   )T)r   
__module____qualname____doc__r   r   boolr   r   r   intr    r   r   r	   r	      sC    *!" ! ! !(2,  U Ur   )r   r   collections.abcr   r   r   typingr   #torch.utils.data.datapipes.datapiper   r   __all__r	   r%   r   r   <module>r*      s=      5 5  < T](
)-U,r"2 -Ur   