Ë
    ÿÍ:jŠ   ã                   óô  — d dl Z d dlmZ d dlmZmZ d dlmZmZm	Z	 d dl
Z
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 dlmZ d d	lmZ 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 dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- de	e   ddfd„Z.de	e/   de/de	e/   de	e/   ddde0e/e/f   fd„Z1ed0de'de2ded   fd „«       Z3d1d!e/d"e/de2fd#„Z4d$eddfd%„Z5ddd&e)defd'„Z6d(edefd)„Z7d*e0e8d+f   d,e2d&e)d-d.ddf
d/„Z9y)2é    N)Ú	Generator)ÚAbstractContextManagerÚcontextmanager)ÚAnyÚCallableÚOptional)ÚTensor)Ú_distributed_is_initialized)ÚPossibleUserWarning)ÚXLAAccelerator)ÚTimer)Ú_Loop)Ú_DataFetcherÚ_DataLoaderIterDataFetcherÚ_PrefetchDataFetcher)Ú_BaseProgress)ÚFSDPStrategy)ÚParallelStrategy)ÚStrategy)ÚRunningStage)Úrank_zero_warn)Úis_param_in_hook_signatureÚlossÚreturnc                 ón   — | �3t        j                  | «      j                  «       st        d| › d�«      ‚yy)zaChecks for finite loss value.

    Args:
        loss: the loss value to check to be finite

    Nz(The loss returned in `training_step` is ú.)ÚtorchÚisfiniteÚallÚ
ValueError)r   s    úv/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/lightning/pytorch/loops/utilities.pyÚcheck_finite_lossr"   '   s;   € ð Ð¤§¡¨tÓ 4× 8Ñ 8Ô :ÜÐCÀDÀ6ÈÐKÓLÐLð !;Ðó    Ú	min_stepsÚ	max_stepsÚ
min_epochsÚ
max_epochsÚtrainerz
pl.Trainerc                 ó�   — |€7|dk(  r0t        d„ |j                  D «       «      st        dt        ¬«       d}nd}|€| �d}|€d}||fS )aæ  This utility computes the default values for the minimum and maximum number of steps and epochs given the values
    the user has selected.

    Args:
        min_steps: Minimum number of steps.
        max_steps: Maximum number of steps.
        min_epochs: Minimum number of epochs.
        max_epochs: Maximum number of epochs.
        trainer: Trainer instance.

    Returns:
        The parsed limits, with default values being set for the ones that the user did not specify.

    éÿÿÿÿc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)Ú
isinstancer   )Ú.0Úcbs     r!   ú	<genexpr>z%_parse_loop_limits.<locals>.<genexpr>H   s   è ø€ Ò&YÀ¤z°"´e×'<Ñ&Yùs   ‚zj`max_epochs` was not set. Setting it to 1000 epochs. To train without an epoch limit, set `max_epochs=-1`.)Úcategoryiè  é   r   )ÚanyÚ	callbacksr   r   )r$   r%   r&   r'   r(   s        r!   Ú_parse_loop_limitsr5   2   sf   € ð* ÐØ˜Š?¤3Ñ&YÀw×GXÑGXÔ&YÔ#YÜð(ä,õð
 ‰JàˆJàÐ˜iÐ3àˆ
àÐàˆ
à�zÐ!Ð!r#   ÚstrategyÚblock)NNNc              #   óŒ   K  — t        | t        «      r |r| j                  «       5  d–— ddd«       yd–— y# 1 sw Y   yxY w­w)a�  Blocks synchronization in :class:`~lightning.pytorch.strategies.parallel.ParallelStrategy`. This is useful for
    example when accumulating gradients to reduce communication when it is not needed.

    Args:
        strategy: the strategy instance to use.
        block: whether the context manager is enabled or not

    Returns:
        context manager with sync behaviour off

    N)r-   r   Úblock_backward_sync)r6   r7   s     r!   Ú_block_parallel_sync_behaviorr:   ]   sF   è ø€ ô �(Ô,Ô-±%Ø×)Ñ)Ó+ñ 	ØŠJ÷	ð 	ð ‹
÷	ð 	üs   ‚#A¥8ªA¸A½AÚcurrentÚmaximumc                 ó   — |dk7  xr | |k\  S )zàCheck if the limit has been reached (if enabled).

    Args:
        current: the current value
        maximum: the maximum value (or -1 to disable limit)

    Returns:
        bool: whether the limit has been reached

    r*   © )r;   r<   s     r!   Ú_is_max_limit_reachedr?   q   s   € ð �b‰=Ò/˜W¨Ñ/Ð/r#   Úloopc                 óº   — t        | «      j                  «       D ]?  }t        |t        «      r|j	                  «        Œ$t        |t
        «      sŒ5t        |«       ŒA y r,   )ÚvarsÚvaluesr-   r   Úresetr   Ú_reset_progress)r@   Úvs     r!   rE   rE      sC   € Ü�$‹Z×ÑÓ ò ˆÜ�aœÔ'Ø�G‰G�IÜ˜œ5Õ!Ü˜AÕñ	r#   Ústagec                 ó¦  — | j                   }|t        j                  k(  rd}ns|t        j                  k(  rd}n]|t        j                  t        j
                  fv rd}n8|t        j                  k(  rd}n"t        d| j                  j                  › �«      ‚t        ||«      }t        |dd¬«      rt        d	|› d
�«       t        «       S t        «       S )NÚ	test_stepÚtraining_stepÚvalidation_stepÚpredict_stepzDataFetcher is unsupported for Údataloader_iterT)Úexplicitz)Found `dataloader_iter` argument in the `zb`. Note that the support for this signature is experimental and the behavior is subject to change.)Úlightning_moduler   ÚTESTINGÚTRAININGÚ
VALIDATINGÚSANITY_CHECKINGÚ
PREDICTINGÚRuntimeErrorÚstaterG   Úgetattrr   r   r   r   )r(   rG   rO   Ústep_fx_nameÚstep_fxs        r!   Ú_select_data_fetcherrZ   ‡   sÍ   € Ø×/Ñ/ÐØ”×$Ñ$Ò$Ø"‰Ø	”,×'Ñ'Ò	'Ø&‰Ø	”<×*Ñ*¬L×,HÑ,HÐIÑ	IØ(‰Ø	”,×)Ñ)Ò	)Ø%‰äÐ<¸W¿]¹]×=PÑ=PÐ<QÐRÓSÐSÜÐ&¨Ó5€GÜ! 'Ð+<ÀtÕLÜØ7¸°~ð FTð Tô	
ô *Ó+Ð+ÜÓ!Ð!r#   Úloop_runc                 óD   ‡ — dt         dt        dt        dt        fˆ fd„}|S )NÚselfÚargsÚkwargsr   c                 ó¨  •— t        | t        «      s"t        dt        | «      j                  › d�«      ‚t        | d«      s"t        dt        | «      j                  › d�«      ‚t        «       r(t        j                  «       dk(  rt        j                  }n—t        | j                  j                  t        «      rt        j                  }nbt        | j                  j                  t        «      rt        j                  }n-| j                   rt        j                   }nt        j                  } |«       5   ‰| g|¢­i |¤Žcd d d «       S # 1 sw Y   y xY w)Nú`z` needs to be a Loop.Úinference_modez$.inference_mode` needs to be definedÚgloo)r-   r   Ú	TypeErrorÚtypeÚ__name__Úhasattrr
   ÚdistÚget_backendr   Úno_gradr(   Úacceleratorr   r6   r   rb   )r]   r^   r_   Úcontext_managerr[   s       €r!   Ú
_decoratorz$_no_grad_context.<locals>._decoratorž   sý   ø€ Ü˜$¤Ô&Ü˜a¤ T£
× 3Ñ 3Ð4Ð4IÐJÓKÐKÜ�tÐ-Ô.Ü˜a¤ T£
× 3Ñ 3Ð4Ð4XÐYÓZÐZä&Ô(¬T×-=Ñ-=Ó-?À6Ò-Iô $Ÿm™m‰OÜ˜Ÿ™×0Ñ0´.ÔAÜ#Ÿm™m‰OÜ˜Ÿ™×-Ñ-¬|Ô<ä#Ÿm™m‰OØ× Ò Ü#×2Ñ2‰Oä#Ÿm™mˆOÙÓñ 	3Ù˜DÐ2 4Ò2¨6Ñ2÷	3÷ 	3ò 	3ús   Ä2EÅE)r   r   )r[   rm   s   ` r!   Ú_no_grad_contextrn   �   s,   ø€ ð3œð 3¤sð 3´cð 3¼cõ 3ð. Ðr#   Úhooks.Úis_expectedÚ	pl_modulezpl.LightningModulec           
      ó´  — | D ]Ó  }t        ||«      }t        |d«      }|sƒ|sŒ t        j                  |«      j                  }d|v sŒD|d   j
                  t        j                  j                  u sŒnt        d|j                  › dt        |«      j                  › d|› d�«      ‚|rŒ£t        d|j                  › dt        |«      j                  › d|› d�«      ‚ y )	NÚdataloader_idxzYou provided only a single `z5_dataloader`, but have included `dataloader_idx` in `r   zS()`. Either remove the argument or give it a default value i.e. `dataloader_idx=0`.zYou provided multiple `z3_dataloader`, but no `dataloader_idx` argument in `z4()`. Try adding `dataloader_idx=0` to its signature.)rW   r   ÚinspectÚ	signatureÚ
parametersÚdefaultÚ	ParameterÚemptyrU   Údataloader_prefixre   rf   )ro   rp   rG   rq   ÚhookÚfxÚparam_presentÚparamss           r!   Ú"_verify_dataloader_idx_requirementr   ¸   sû   € ð ò ˆÜ�Y Ó%ˆä2°2Ð7GÓHˆÙÚÜ ×*Ñ*¨2Ó.×9Ñ9�Ø# vÒ-°&Ð9IÑ2J×2RÑ2RÔV]×VgÑVg×VmÑVmÒ2mÜ&Ø6°u×7NÑ7NÐ6Oð P0Ü04°Y³×0HÑ0HÐ/IÈÈ4È&ð QXðXóð ò
 ÜØ)¨%×*AÑ*AÐ)Bð C!Ü!% i£×!9Ñ!9Ð :¸!¸D¸6ð Bðóð ñr#   )T)r*   ):rt   Úcollections.abcr   Ú
contextlibr   r   Útypingr   r   r   r   Útorch.distributedÚdistributedrh   r	   Úlightning.pytorchÚpytorchÚplÚ&lightning.fabric.utilities.distributedr
   Ú#lightning.fabric.utilities.warningsr   Ú"lightning.pytorch.accelerators.xlar   Ú!lightning.pytorch.callbacks.timerr   Úlightning.pytorch.loopsr   Ú lightning.pytorch.loops.fetchersr   r   r   Ú lightning.pytorch.loops.progressr   Úlightning.pytorch.strategiesr   Ú%lightning.pytorch.strategies.parallelr   Ú%lightning.pytorch.strategies.strategyr   Ú lightning.pytorch.trainer.statesr   Ú%lightning.pytorch.utilities.rank_zeror   Ú+lightning.pytorch.utilities.signature_utilsr   r"   ÚintÚtupler5   Úboolr:   r?   rE   rZ   rn   Ústrr   r>   r#   r!   ú<module>r™      sw  ðó Ý %ß =ß *Ñ *ã Ý  Ý å Ý NÝ CÝ =Ý 3Ý )ß kÑ kÝ :Ý 5Ý BÝ :Ý 9Ý @Ý RðM˜H VÑ,ð M°ó Mð("Ø˜‰}ð("àð("ð ˜‘ð("ð ˜‘ð	("ð
 ð("ð ˆ3�ˆ8�_ó("ðV ñ¨Hð ¸Tð ÈYÐWgÑMhò ó ðñ&0 3ð 0°ð 0¸dó 0ð˜%ð  Dó ð" ,ð "°|ð "Èó "ð,˜xð ¨Hó ð6Ø��c�‰?ðØ)-ðØ6BðØOcðà	ôr#   