Ë
    ÿÍ:j¯A  ã                   óR  — d Z ddlZddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZ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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& erddl'm(Z(  ejR                  e*«      Z+ ed«      Z,de-fd„Z. G d„ de«      Z/y)zzFabric/PyTorch Lightning logger that enables remote experiment tracking, logging, and artifact management on
lightning.ai.é    N)Ú	Namespace)ÚMapping)ÚdatetimeÚtimezone)ÚTYPE_CHECKINGÚAnyÚOptionalÚUnionÚcast)ÚRequirementCache)ÚTensor)ÚModule)Úoverride)ÚLoggerÚrank_zero_experiment)Úget_filesystem)Ú_add_prefix)Úrank_zero_only)Ú_PATH)ÚModelCheckpoint)Ú_scan_checkpoints)Ú
Experimentzlitlogger>=0.1.0Úreturnc                  ó   — ddl m}   | «       S )z<Create a random experiment name using litlogger's generator.r   ©Ú_create_name)Úlitlogger.generatorr   r   s    úx/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/lightning/pytorch/loggers/litlogger.pyÚ_create_experiment_namer   .   s   € å0á‹>Ðó    c                   óô  — e Zd ZdZdZ	 	 	 	 	 	 	 	 d3dee   dee   dee   deeeef      de	d	e	d
e	dee   ddfd„Z
eedefd„«       «       Zeedee   fd„«       «       Zeedefd„«       «       Zeedefd„«       «       Zedefd„«       Zedee   fd„«       Zedefd„«       Zededefd„«       Zdefd„Zedee   dee   dee   fd„«       Zeeded   fd„«       «       Zd4d„Zeedefd„«       «       Zeed5deeef   dee   ddfd „«       «       Z ee	 d5d!e!eee"f   e#f   deeee"f      ddfd"„«       «       Z$eed5d#e%d$ee&   ddfd%„«       «       Z'eed6d&„«       «       Z(eed5d'ee   ddfd(„«       «       Z)ed!e!eee"f   e#f   ddfd)„«       Z*e	 	 	 	 d7d#e"d*ee   d+e	dee   deeee"f      ddfd,„«       Z+e	 	 d8ded+e	dee   ddfd-„«       Z,ed9ded+e	defd.„«       Z-ededdfd/„«       Z.d0e/ddfd1„Z0d0e/ddfd2„Z1y):Ú	LitLoggerzaLogger that enables remote experiment tracking, logging, and artifact management on lightning.ai.ú-NÚroot_dirÚnameÚ	teamspaceÚmetadataÚ
store_stepÚ	log_modelÚ	save_logsÚcheckpoint_namer   c	                 óX  — t        j                  |xs d«      | _        |xs
 t        «       | _        d| _        || _        d| _        d| _        t        | j                  «      | _
        d| _        d| _        |xs i | _        d| _        || _        || _        d| _        i | _        || _        y)aÕ  Initialize the LightningLogger.

        Args:
            root_dir: Folder where logs and metadata are stored (default: ./lightning_logs).
            name: Name of your experiment (defaults to a generated name).
            teamspace: Teamspace name where charts and artifacts will appear.
            metadata: Extra metadata to associate with the experiment as tags.
            log_model: If True, automatically log model checkpoints as artifacts.
            save_logs: If True, capture and upload terminal logs.
            checkpoint_name: Override the base name for logged checkpoints.

        Example::

            from lightning.pytorch import Trainer
            from lightning.pytorch.demos.boring_classes import BoringModel, BoringDataModule
            from lightning.pytorch.loggers.litlogger import LitLogger

            class LoggingModel(BoringModel):
                def training_step(self, batch, batch_idx: int):
                    loss = self.step(batch)
                    # logging the computed loss
                    self.log("train_loss", loss)
                    return {"loss": loss}

            trainer = Trainer(
                max_epochs=10,
                enable_model_summary=False,
                logger=LitLogger("./lightning_logs", name="boring_model")
            )
            model = BoringModel()
            data_module = BoringDataModule()
            trainer.fit(model, data_module)
            trainer.test(model, data_module)

        z./lightning_logsNÚ éÿÿÿÿF)ÚosÚfspathÚ	_root_dirr   Ú_nameÚ_versionÚ
_teamspaceÚ_sub_dirÚ_prefixr   Ú_fsÚ_experimentÚ_stepÚ	_metadataÚ	_is_readyÚ
_log_modelÚ
_save_logsÚ_checkpoint_callbackÚ_logged_model_timeÚ_checkpoint_name)	Úselfr$   r%   r&   r'   r(   r)   r*   r+   s	            r   Ú__init__zLitLogger.__init__:   sž   € ô\ Ÿ™ 8Ò#AÐ/AÓBˆŒØÒ6Ô4Ó6ˆŒ
Ø'+ˆŒØ#ˆŒØˆŒØˆŒÜ! $§.¡.Ó1ˆŒØ15ˆÔØˆŒ
Ø!š RˆŒØˆŒØ#ˆŒØ#ˆŒØ?CˆÔ!Ø46ˆÔØ /ˆÕr    c                 ó   — | j                   S )z Gets the name of the experiment.)r2   ©rA   s    r   r%   zLitLogger.name}   s   € ð �z‰zÐr    c                 ó   — | j                   S )z2Get the experiment version - its time of creation.)r3   rD   s    r   ÚversionzLitLogger.versionƒ   s   € ð �}‰}Ðr    c                 ó   — | j                   S )zBGets the save directory where the litlogger experiments are saved.)r1   rD   s    r   r$   zLitLogger.root_dir‰   s   € ð �~‰~Ðr    c                 ón  — t         j                  j                  | j                  | j                  «      }t        | j                  t        «      r*t         j                  j                  || j                  «      }t         j                  j                  |«      }t         j                  j                  |«      S )zÿThe directory for this run's tensorboard checkpoint.

        By default, it is named ``'version_${self.version}'`` but it can be overridden by passing a string value for the
        constructor's version parameter instead of ``None`` or an int.

        )
r/   ÚpathÚjoinr$   r%   Ú
isinstanceÚsub_dirÚstrÚ
expandvarsÚ
expanduser)rA   Úlog_dirs     r   rP   zLitLogger.log_dir�   so   € ô —'‘'—,‘,˜tŸ}™}¨d¯i©iÓ8ˆÜ�d—l‘l¤CÔ(Ü—g‘g—l‘l 7¨D¯L©LÓ9ˆGÜ—'‘'×$Ñ$ WÓ-ˆÜ�w‰w×!Ñ! 'Ó*Ð*r    c                 ó   — | j                   S ©N)rP   rD   s    r   Úsave_dirzLitLogger.save_dirž   s   € à�|‰|Ðr    c                 ó   — | j                   S )zCGets the sub directory where the TensorBoard experiments are saved.)r5   rD   s    r   rL   zLitLogger.sub_dir¢   s   € ð �}‰}Ðr    c                 óh   — | j                   €| j                  S | j                  › d| j                   › �S )Nr#   )rF   r%   rD   s    r   Ú_experiment_namezLitLogger._experiment_name§   s/   € à�<‰<ÐØ—9‘9ÐØ—)‘)�˜A˜dŸl™l˜^Ð,Ð,r    rI   c                 óð   — 	 t         j                  j                  | «      }|�|j	                  d«      s|nt         j                  j                  | «      }|j                  dd«      S # t        $ r d }Y ŒSw xY w)Nz..ú\ú/)r/   rI   ÚrelpathÚ
ValueErrorÚ
startswithÚbasenameÚreplace)rI   ÚrelÚkeys      r   Ú_default_artifact_keyzLitLogger._default_artifact_key­   sh   € ð	Ü—'‘'—/‘/ $Ó'ˆCð �_¨S¯^©^¸DÔ-A‰cÄrÇwÁw×GWÑGWÐX\ÓG]ˆØ�{‰{˜4 Ó%Ð%øô ò 	ØŠCð	ús   ‚A' Á'A5Á4A5c                 ó   — | j                   S rR   )rV   rD   s    r   Ú
_model_keyzLitLogger._model_key¶   s   € Ø×$Ñ$Ð$r    rF   Ústepc                 ó0   — | �| S |�|dk\  rt        |«      S y )Nr   )rM   )rF   rd   s     r   Ú_model_versionzLitLogger._model_version¹   s&   € àÐØˆNØÐ ¨¢	Ü�t“9ÐØr    r   c                 ó  — ddl }| j                  �| j                  S | j                  sd| _        t        j                  dk(  sJ d«       ‚| j
                  r'| j                  j                  | j
                  d¬«       | j                  €Zt        j                  t        j                  «      j                  d¬«      }|j                  dd	«      j                  d
d«      | _        |j!                  | j"                  | j$                  | j&                  j)                  «       D ��ci c]  \  }}|t+        |«      “Œ c}}dd| j,                  | j.                  ¬«      | _        | j                  j1                  «        | j                  S c c}}w )z3Returns the underlying litlogger Experiment object.r   NTz+tried to init log dirs in non global_rank=0)Úexist_okÚmilliseconds)Útimespecú:r#   z+00:00ÚZ)r%   r&   r'   r(   Ústore_created_atrP   r*   )Ú	litloggerr8   r;   r   Úrankr$   r7   ÚmakedirsrF   r   Únowr   ÚutcÚ	isoformatr^   r3   r   rV   r4   r:   ÚitemsrM   rP   r=   Ú	print_url)rA   rn   Ú	timestampÚkÚvs        r   Ú
experimentzLitLogger.experimentÁ   s=  € ó 	à×ÑÐ'Ø×#Ñ#Ð#à�~Š~Ø!ˆDŒNä×"Ñ" aÒ'ÐVÐ)VÓVÐ'Ø�=Š=Ø�H‰H×Ñ˜dŸm™m°dÐÔ;à�<‰<Ðä Ÿ™¤X§\¡\Ó2×<Ñ<ÀnÐ<ÓUˆIØ%×-Ñ-¨c°3Ó7×?Ñ?ÀÈ#ÓNˆDŒMà$×/Ñ/Ø×&Ñ&Ø—o‘oØ,0¯N©N×,@Ñ,@Ó,B×C¡D A q�aœ˜Q›‘iÓCØØ!Ø—L‘LØ—o‘oð 0ó 
ˆÔð 	×Ñ×"Ñ"Ô$à×ÑÐùó Ds   Ä!Fc                 ó8   — | j                   }|€t        d«      ‚|S )NzExperiment is not initialized)ry   ÚRuntimeError)rA   ry   s     r   Ú_require_experimentzLitLogger._require_experimentã   s#   € Ø—_‘_ˆ
ØÐÜÐ>Ó?Ð?ØÐr    c                 ó6   — | j                  «       j                  S rR   )r|   ÚurlrD   s    r   r~   zLitLogger.urlé   s   € ð ×'Ñ'Ó)×-Ñ-Ð-r    Úmetricsc           	      óÌ  — t         j                  dk(  sJ d«       ‚| j                  «       }|€| j                  dz   n|| _        t	        || j
                  | j                  «      }|j                  «       D ��ci c](  \  }}|t        |t        «      r|j                  «       n|“Œ* }}}|j                  «       D ]%  \  }}||   j                  || j                  ¬«       Œ' y c c}}w )Nr   z-experiment tried to log from global_rank != 0é   )rd   )r   ro   r|   r9   r   r6   ÚLOGGER_JOIN_CHARrt   rK   r   ÚitemÚappend)rA   r   rd   ry   rw   rx   r`   Úvalues           r   Úlog_metricszLitLogger.log_metricsò   sÈ   € ô ×"Ñ" aÒ'ÐXÐ)XÓXÐ'ð ×-Ñ-Ó/ˆ
à'+ |�T—Z‘Z !’^¸ˆŒ
ä˜g t§|¡|°T×5JÑ5JÓKˆØKRÏ=É=Ë?×[Á4À1Àa�1¤*¨Q´Ô"7�a—f‘f”h¸QÑ>Ð[ˆÑ[Ø!Ÿ-™-›/ò 	;‰JˆC�Ø�s‰O×"Ñ" 5¨t¯z©zÐ"Õ:ñ	;ùó \s   Á7-C Úparamsc                 ó¨   — t        |t        «      r|j                  }| j                  «       }|j	                  «       D ]  \  }}t        |«      ||<   Œ y©zLog hyperparams.N©rK   r   Ú__dict__r|   rt   rM   )rA   r‡   r   ry   r`   r…   s         r   Úlog_hyperparamszLitLogger.log_hyperparams  sK   € ô �fœiÔ(Ø—_‘_ˆFØ×-Ñ-Ó/ˆ
Ø Ÿ,™,›.ò 	)‰JˆC�Ü! %›jˆJ�sŠOñ	)r    ÚmodelÚinput_arrayc                 ó<   — t        j                  dt        d¬«       y )Nz&LitLogger does not support `log_graph`é   )Ú
stacklevel)ÚwarningsÚwarnÚUserWarning)rA   r�   rŽ   s      r   Ú	log_graphzLitLogger.log_graph  s   € ô 	�‰Ð>ÄÐXYÖZr    c                  ó   — y rR   © rD   s    r   ÚsavezLitLogger.save  s   € ð 	r    Ústatusc                 ó¢   — | j                   �C| j                  r| j                  | j                  «       | j                   j                  |«       y y rR   )r8   r>   Ú_scan_and_log_checkpointsÚfinalize)rA   r™   s     r   rœ   zLitLogger.finalize  sF   € ð ×ÑÐ'à×(Ò(Ø×.Ñ.¨t×/HÑ/HÔIØ×Ñ×%Ñ% fÕ-ð	 (r    c                 ó¨   — t        |t        «      r|j                  }| j                  «       }|j	                  «       D ]  \  }}t        |«      ||<   Œ yr‰   rŠ   )rA   r‡   ry   r`   r…   s        r   Úlog_metadatazLitLogger.log_metadata&  sK   € ô �fœiÔ(Ø—_‘_ˆFØ×-Ñ-Ó/ˆ
Ø Ÿ,™,›.ò 	)‰JˆC�Ü! %›jˆJ�sŠOñ	)r    Ústaging_dirÚverbosec           
      óÞ   — ddl m}  ||| j                  || j                  «      t	        t
        t        t        t        f      |«      |¬«      | j                  «       | j                  «       <   y)a¹  Save and upload a model object to cloud storage.

        Args:
            model: The model object to save and upload (e.g., torch.nn.Module).
            staging_dir: Optional local directory for staging the model before upload.
            verbose: Whether to show progress bar during upload.
            version: Optional version string for the model.
            metadata: Optional metadata dictionary to store with the model.

        r   ©ÚModel)rF   r'   rŸ   N)
rn   r£   rf   r9   r   r	   ÚdictrM   r|   rc   )rA   r�   rŸ   r    rF   r'   r£   s          r   r)   zLitLogger.log_model2  sW   € õ& 	$á8=ØØ×'Ñ'¨°·±Ó<Üœ(¤4¬¬S¨¡>Ñ2°HÓ=Ø#ô	9
ˆ× Ñ Ó" 4§?¡?Ó#4Ò5r    c                 ó–   — ddl m}  ||| j                  || j                  «      ¬«      | j	                  «       | j                  «       <   y)aV  Upload a model file or directory to cloud storage using litmodels.

        Args:
            path: Path to the local model file or directory to upload.
            verbose: Whether to show progress bar during upload. Defaults to False.
            version: Optional version string for the model. Defaults to the experiment version.

        r   r¢   ©rF   N)rn   r£   rf   r9   r|   rc   )rA   rI   r    rF   r£   s        r   Úlog_model_artifactzLitLogger.log_model_artifactN  s=   € õ 	$á8=¸dÈD×L_ÑL_Ð`gÐim×isÑisÓLtÔ8uˆ× Ñ Ó" 4§?¡?Ó#4Ò5r    c                 ó„   — t        t        | j                  «       | j                  |«         «      }|j	                  |«      S )a?  Download a file artifact from the cloud for this experiment.

        Args:
            path: Path where the file should be saved locally.
            verbose: Whether to print a confirmation message after download. Defaults to True.

        Returns:
            str: The local path where the file was saved.

        )r   r   r|   ra   r˜   )rA   rI   r    Úfiles       r   Úget_filezLitLogger.get_filea  s7   € ô ”C˜×1Ñ1Ó3°D×4NÑ4NÈtÓ4TÑUÓVˆØ�y‰y˜‹Ðr    c                 ó`   — ddl m}  ||«      | j                  «       | j                  |«      <   y)aM  Log a file as an artifact to the Lightning platform.

        The file will be logged in the Teamspace drive,
        under a folder identified by the experiment name.

        Args:
            path: Path to the file to log.

        Example::
            logger = LitLogger(...)
            logger.log_file('config.yaml')

        r   )ÚFileN)rn   r¬   r|   ra   )rA   rI   r¬   s      r   Úlog_filezLitLogger.log_filep  s)   € õ 	#áGKÈDÃzˆ× Ñ Ó" 4×#=Ñ#=¸dÓ#CÒDr    Úcheckpoint_callbackc                 ór   — | j                   du ry|j                  dk(  r| j                  |«       y|| _        y)z`Called after a checkpoint is saved.

        Logs checkpoints as artifacts if enabled.

        FNr.   )r<   Ú
save_top_kr›   r>   )rA   r®   s     r   Úafter_save_checkpointzLitLogger.after_save_checkpoint‡  s8   € ð �?‰?˜eÑ#ØØ×)Ñ)¨RÒ/Ø×*Ñ*Ð+>Õ?à(;ˆDÕ%r    c                 ó  — t        || j                  «      }|D ]p  \  }}}}| j                  «       }| j                  xs |j                  }t        |dd«      }	ddlm}
  |
|| j                  d|	«      ¬«      ||<   || j                  |<   Œr y)zGFind new checkpoints from the callback and log them as model artifacts.Ú_last_global_step_savedNr   r¢   r¦   )	r   r?   r|   r@   r%   Úgetattrrn   r£   rf   )rA   r®   Úcheckpointsrv   Ú	path_ckptÚ_scoreÚ_tagry   Úcheckpoint_keyÚcheckpoint_stepr£   s              r   r›   z#LitLogger._scan_and_log_checkpoints˜  s“   € ä'Ð(;¸T×=TÑ=TÓUˆà2=ò 	;Ñ.ˆI�y &¨$Ø×1Ñ1Ó3ˆJØ!×2Ñ2ÒE°j·o±oˆNÜ%Ð&9Ð;TÐVZÓ[ˆOÝ'á).¨yÀ$×BUÑBUÐVZÐ\kÓBlÔ)mˆJ�~Ñ&à1:ˆD×#Ñ# IÒ.ñ	;r    )NNNNTFTN)r   r   rR   )r   N)NFNN)FN)T)2Ú__name__Ú
__module__Ú__qualname__Ú__doc__r‚   r	   r   rM   r¤   ÚboolrB   Úpropertyr   r%   rF   r$   rP   rS   rL   rV   Ústaticmethodra   rc   Úintrf   r   ry   r|   r   r~   r   Úfloatr†   r
   r   r   rŒ   r   r   r•   r˜   rœ   rž   r)   r§   rª   r­   r   r±   r›   r—   r    r   r"   r"   5   sÆ  „ ÙkàÐð %)Ø"Ø#'Ø-1ØØØØ)-ñ=0à˜5‘/ð=0ð �s‰mð=0ð ˜C‘=ð	=0ð
 ˜4  S ™>Ñ*ð=0ð ð=0ð ð=0ð ð=0ð " #™ð=0ð 
ó=0ðF Øð�cò ó ó ðð Øð˜ #™ò ó ó ðð Øð˜#ò ó ó ðð Øð+˜ò +ó ó ð+ð ð˜#ò ó ðð ð˜ #™ò ó ðð ð- #ò -ó ð-ð
 ð& Cð &¨Cò &ó ð&ð%˜Có %ð ð ¨¡ð °X¸c±]ð ÀxÐPSÁ}ò ó ðð Øð ˜H \Ñ2ò  ó ó ð ó@ð Øð.�Sò .ó ó ð.ð Øñ; 7¨3°¨:Ñ#6ð ;¸hÀs¹mð ;ÐW[ò ;ó ó ð;ð Øð -1ñ
)à�d˜3 ˜8‘n iÐ/Ñ0ð
)ð ˜$˜s C˜x™.Ñ)ð
)ð 
ò	
)ó ó ð
)ð Øñ[˜vð [°H¸VÑ4Dð [ÐPTò [ó ó ð[ð Øòó ó ðð Øñ.˜x¨™}ð .¸ò .ó ó ð.ð ð	)à�d˜3 ˜8‘n iÐ/Ñ0ð	)ð 
ò	)ó ð	)ð ð &*ØØ!%Ø-1ñ
àð
ð ˜c‘]ð
ð ð	
ð
 ˜#‘ð
ð ˜4  S ™>Ñ*ð
ð 
ò
ó ð
ð6 ð Ø!%ñ	vàðvð ðvð ˜#‘ð	vð
 
òvó ðvð$ ñ˜Sð ¨4ð ¸3ò ó ðð ðR˜Sð R Tò Ró ðRð,<¸ð <ÈTó <ð";¸_ð ;ÐQUô ;r    r"   )0r¾   Úloggingr/   r’   Úargparser   Úcollections.abcr   r   r   Útypingr   r   r	   r
   r   Ú lightning_utilities.core.importsr   Útorchr   Útorch.nnr   Útyping_extensionsr   Úlightning.fabric.loggers.loggerr   r   Ú#lightning.fabric.utilities.cloud_ior   Ú!lightning.fabric.utilities.loggerr   Ú$lightning.fabric.utilities.rank_zeror   Ú lightning.fabric.utilities.typesr   Úlightning.pytorch.callbacksr   Ú#lightning.pytorch.loggers.utilitiesr   rn   r   Ú	getLoggerr»   ÚlogÚ_LITLOGGER_AVAILABLErM   r   r"   r—   r    r   ú<module>rÖ      sƒ   ðñó Û 	Û Ý Ý #ß 'ß <Õ <å =Ý Ý Ý &ç HÝ >Ý 9Ý ?Ý 2Ý 7Ý AáÝ$à€g×Ñ˜Ó!€á'Ð(:Ó;Ð ð ó ôo;�õ o;r    