Ë
    ÿÍ:j¶  ã                   ó´   — 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/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/pytorch_lightning/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   € à× Ñ Ð(Ü+Ø�D—N‘N×+Ñ+Ð,Ð,_Ð`óð ð ×$Ñ$Ð$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ð
 ×ÑÔ!Ø�Š˜Ñ�Ø�;‰;Ð"ØŸ™¨¯©Ñ3ˆDŒIØˆøô ò 	ØˆDŒIØð	ûð ×ÑÕ!ú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Ó9ˆDŒKØŸ™ qÑ(ˆD�Ið -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   s}   ø€ ä‰ÑÔØ�;‰;Ð"àˆ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‘   ø€ à�<Š<ð —L‘L×$Ñ$ QÓ'ˆEð-à—‘×#Ñ#¤E¡GÑ$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   € à�9Š9ÜÐØ×$Ñ$Ð$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   ø€ à×#Ñ#ˆØ�<Š<ÜÐÜ+0Ô1KÈWÑ+^Ó+`Ñ(ˆˆ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   Ú+pytorch_lightning.utilities.combined_loaderr   r	   Ú&pytorch_lightning.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   