
      i                         d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ ddZ G d	 d
e      Z G d de      Z G d de      Z G d de      Zy)    )Iterator)AnyOptional)override)	sized_len)_ITERATOR_RETURNCombinedLoader)MisconfigurationExceptionNc                       y N r       u/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning/pytorch/loops/fetchers.py_profile_nothingr      s    r   c                   r    e Zd ZddZedefd       ZdeddfdZedd       Z	ede
fd       Zdd	Zdd
Zy)_DataFetcherreturnNc                 v    d | _         d | _        d| _        d| _        d | _        t
        | _        t
        | _        y )Nr   F)_combined_loaderiteratorfetcheddonelengthr   _start_profiler_stop_profilerselfs    r   __init__z_DataFetcher.__init__   s6    :>,0	%)/.r   c                 x    | j                   #t        d| j                  j                   d      | j                   S )N`z3` should have been `setup` with a `CombinedLoader`.)r   r
   	__class____name__r   s    r   combined_loaderz_DataFetcher.combined_loader'   sA      (+DNN++,,_`  $$$r   r#   c                     || _         y r   )r   )r   r#   s     r   setupz_DataFetcher.setup/   s
     /r   c                 Z    t        | j                        | _        | j                          | S r   )iterr#   r   resetr   s    r   __iter__z_DataFetcher.__iter__2   s"    T112

r   c                 b   | j                   J | j                          	 t        | j                         }	 | j                          | xj                  dz  c_        | j                  | j                  | j                  k\  | _        |S # t        $ r	 d| _         w xY w# | j                          w xY w)NT   )r   r   nextStopIterationr   r   r   r   )r   batchs     r   __next__z_DataFetcher.__next__8   s    }}(((	"'E
 !;;"3DI  	DI	 !s   B BB B.c                     d| _         | j                  /t        | j                        | _        | j                  dk(  | _        y y Nr   )r   r   r   r#   r   r   r   s    r   r(   z_DataFetcher.resetH   s<      ,#D$8$89DKq(DI -r   c                 ~    | j                          | j                  | j                  j                          d | _        y r   )r(   r   r   r   s    r   teardownz_DataFetcher.teardownO   s0    

  ,!!'')r   r   N)r   r   )r"   
__module____qualname__r   propertyr	   r#   r%   r   r)   r   r/   r(   r3   r   r   r   r   r      so    / % % %0^ 0 0  
 *  )r   r   c                   t     e Zd ZdZd	deddf fdZed
 fd       Zedef fd       Z	ed fd       Z
 xZS )_PrefetchDataFetchera{  This class is used to control batch fetching flow.

    Args:
        prefetch_batches: Number of batches to pre-fetch. Pre-fetching at least 1 batch is necessary to properly track
            whether a batch is the last one (available with :attr:`self.done`) when the length is not available. The
            value of this argument is ignored when the length is available.

    prefetch_batchesr   Nc                 ^    t         |           |dk  rt        d      || _        g | _        y )Nr   z(`prefetch_batches` should at least be 0.)superr   
ValueErrorr:   batches)r   r:   r!   s     r   r   z_PrefetchDataFetcher.__init__`   s1    aGHH 0"$r   c                     t         |           | j                  | S t        | j                        D ],  }	 t         |          }| j                  j                  |       . | S # t        $ r Y  | S w xY wr   )	r<   r)   r   ranger:   r/   r>   appendr-   )r   _r.   r!   s      r   r)   z_PrefetchDataFetcher.__iter__g   sx    ;;"Kt,,-A(*##E* . 	 !  	s   )A$$	A21A2c                 .   | j                   rE| j                   j                  d      }	 | j                   j                  t        |                 |S | j                  st        |          }|S t
        # t
        $ r | j                    | _        Y |S w xY wr1   )r>   poprA   r<   r/   r-   r   )r   r.   r!   s     r   r/   z_PrefetchDataFetcher.__next__x   s    << LL$$Q'E-##EG$4$67  G$&E    ! - $,	 -s   'A5 5BBc                 0    t         |           g | _        y r   )r<   r(   r>   r   r!   s    r   r(   z_PrefetchDataFetcher.reset   s    r   )r+   )r   r9   r4   )r"   r5   r6   __doc__intr   r   r)   r   r/   r(   __classcell__r!   s   @r   r9   r9   V   s_    % %T %    *  &  r   r9   c                   x     e Zd ZdZdededdf fdZed fd       Zeded   fd	       Z	ed fd
       Z
 xZS )_DataLoaderIterDataFetchera9  This class is used to return directly the `dataloader_iter` to the ``LightningModule`` training_step for users
    to implement their own pre-fetching logic. This feature can be activated as follows:

    Example::

        Class MyModel(LightningModule):
            def training_step(self, dataloader_iter: Iterator) -> None:
                # it is the user responsibility to fetch and move the batch to the right device.
                batch, batch_idx, dataloader_idx = next(dataloader_iter)
                batch = batch.to(self.device)
                ...

    argskwargsr   Nc                 N    t        |   |i | d | _        d| _        d| _        y r1   )r<   r   _batch
_batch_idx_dataloader_idx)r   rM   rN   r!   s      r   r   z#_DataLoaderIterDataFetcher.__init__   s+    $)&) $%r   c                 V    t         |           t        t        |             | _        | S r   )r<   r)   r'   _DataFetcherWrapperiterator_wrapperrF   s    r   r)   z#_DataLoaderIterDataFetcher.__iter__   s&     $%8%> ?r   rT   c                 >    | j                   rt        | j                  S r   )r   r-   rU   r   s    r   r/   z#_DataLoaderIterDataFetcher.__next__   s    99$$$r   c                 L    t         |           d | _        d| _        d| _        y r1   )r<   r(   rP   rQ   rR   rF   s    r   r(   z _DataLoaderIterDataFetcher.reset   s"     r   )r   rL   r4   )r"   r5   r6   rG   r   r   r   r)   r   r/   r(   rI   rJ   s   @r   rL   rL      sk    &c &S &T &  
 %(#89 % %
 ! !r   rL   c                        e Zd ZdeddfdZedefd       Zedefd       Z	ede
e   fd       Zedef fd       Z xZS )	rT   data_fetcherr   Nc                     || _         y r   )rY   )r   rY   s     r   r   z_DataFetcherWrapper.__init__   s
    (r   c                 .    | j                   j                  S r   )rY   r   r   s    r   r   z_DataFetcherWrapper.done   s      %%%r   c                 .    | j                   j                  S r   )rY   r   r   s    r   r   z_DataFetcherWrapper.fetched   s      (((r   c                 .    | j                   j                  S r   )rY   r   r   s    r   r   z_DataFetcherWrapper.length   s      '''r   c                     | j                   }|j                  rt        t        t        |         \  }}}||_        ||_        ||_        |||fS r   )	rY   r   r-   r<   rL   r/   rP   rQ   rR   )r   fetcherr.   	batch_idxdataloader_idxr!   s        r   r/   z_DataFetcherWrapper.__next__   sV    ##<<+01KW+^+`(y.&"0i//r   )r"   r5   r6   rL   r   r7   boolr   rH   r   r   r   r   r   r/   rI   rJ   s   @r   rT   rT      s    )%? )D ) &d & & ) ) ) ( ( ( 	0* 	0 	0r   rT   r4   )collections.abcr   typingr   r   typing_extensionsr   lightning.fabric.utilities.datar   +lightning.pytorch.utilities.combined_loaderr   r	   &lightning.pytorch.utilities.exceptionsr
   r   r   r9   rL   rT   r   r   r   <module>ri      sQ    %   & 5 X L	68 6r9< 9x&! &!R0( 0r   