Ë
    ÿÍ:jL:  ã                   ón  — d Z ddl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
 ddlmZ ddlmZmZmZ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mZmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z' erddl(m)Z)  ejT                  e+«      Z,dZ- edd«      Z. edd«      Z/ G d„ de!«      Z0defd„Z1y)z
MLflow Logger
-------------
é    N)Ú	Namespace)ÚMapping)ÚPath)Útime)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚOptionalÚUnion)ÚRequirementCache)ÚTensor)Úoverride)Ú_add_prefixÚ_convert_paramsÚ_flatten_dict)ÚModelCheckpoint)ÚLoggerÚrank_zero_experiment)Ú_scan_checkpoints)Úrank_zero_onlyÚrank_zero_warn©ÚMlflowClientzfile:zmlflow>=1.0.0Úmlflowzmlflow>=2.8.0c                   óH  ‡ — e Zd ZdZdZdd ej                  d«      dddddddf
d	ed
ee   dee   dee	ee
f      dee   ded   dedee   dee   dee   fˆ fd„Zeed&d„«       «       Zedee   fd„«       Zedee   fd„«       Zeedee	ee
f   ef   ddfd„«       «       Zeed'deeef   dee   ddfd„«       «       Zeed(deddfd„«       «       Zeedee   fd „«       «       Zeedee   fd!„«       «       Zeedee   fd"„«       «       Zed#e ddfd$„«       Z!d#e ddfd%„Z"ˆ xZ#S ))ÚMLFlowLoggeraþ
  Log using `MLflow <https://mlflow.org>`_.

    Install it with pip:

    .. code-block:: bash

        pip install mlflow  # or mlflow-skinny

    .. code-block:: python

        from lightning.pytorch import Trainer
        from lightning.pytorch.loggers import MLFlowLogger

        mlf_logger = MLFlowLogger(experiment_name="lightning_logs", tracking_uri="file:./ml-runs")
        trainer = Trainer(logger=mlf_logger)

    Use the logger anywhere in your :class:`~lightning.pytorch.core.LightningModule` as follows:

    .. code-block:: python

        from lightning.pytorch import LightningModule


        class LitModel(LightningModule):
            def training_step(self, batch, batch_idx):
                # example
                self.logger.experiment.whatever_ml_flow_supports(...)

            def any_lightning_module_function_or_hook(self):
                self.logger.experiment.whatever_ml_flow_supports(...)

    Args:
        experiment_name: The name of the experiment.
        run_name: Name of the new run. The `run_name` is internally stored as a ``mlflow.runName`` tag.
            If the ``mlflow.runName`` tag has already been set in `tags`, the value is overridden by the `run_name`.
        tracking_uri: Address of local or remote tracking server.
            If not provided, defaults to `MLFLOW_TRACKING_URI` environment variable if set, otherwise it falls
            back to `file:<save_dir>`.
        tags: A dictionary tags for the experiment.
        save_dir: A path to a local directory where the MLflow runs get saved.
            Defaults to `./mlruns` if `tracking_uri` is not provided.
            Has no effect if `tracking_uri` is provided.
        log_model: Log checkpoints created by :class:`~lightning.pytorch.callbacks.model_checkpoint.ModelCheckpoint`
            as MLFlow artifacts.

            * if ``log_model == 'all'``, checkpoints are logged during training.
            * if ``log_model == True``, checkpoints are logged at the end of training, except when
              :paramref:`~lightning.pytorch.callbacks.Checkpoint.save_top_k` ``== -1``
              which also logs every checkpoint during training.
            * if ``log_model == False`` (default), no checkpoint is logged.

        prefix: A string to put at the beginning of metric keys.
        artifact_location: The location to store run artifacts. If not provided, the server picks an appropriate
            default.
        run_id: The run identifier of the experiment. If not provided, a new run is started.
        synchronous: Hints mlflow whether to block the execution for every logging call until complete where
            applicable. Requires mlflow >= 2.8.0

    Raises:
        ModuleNotFoundError:
            If required MLFlow package is not installed on the device.

    ú-Úlightning_logsNÚMLFLOW_TRACKING_URIz./mlrunsFÚ Úexperiment_nameÚrun_nameÚtracking_uriÚtagsÚsave_dirÚ	log_model)TFÚallÚprefixÚartifact_locationÚrun_idÚsynchronousc                 ó„  •— t         st        t        t         «      «      ‚|
�t        st        d«      ‚t        ‰| �  «        |s
t        › |› �}|| _        d | _        || _	        || _
        |	| _        || _        || _        i | _        d | _        || _        || _        |
€i nd|
i| _        d| _        ddlm}  ||«      | _        y )Nz$`synchronous` requires mlflow>=2.8.0r,   Fr   r   )Ú_MLFLOW_AVAILABLEÚModuleNotFoundErrorÚstrÚ_MLFLOW_SYNCHRONOUS_AVAILABLEÚsuperÚ__init__ÚLOCAL_FILE_URI_PREFIXÚ_experiment_nameÚ_experiment_idÚ_tracking_uriÚ	_run_nameÚ_run_idr%   Ú
_log_modelÚ_logged_model_timeÚ_checkpoint_callbackÚ_prefixÚ_artifact_locationÚ_log_batch_kwargsÚ_initializedÚmlflow.trackingr   Ú_mlflow_client)Úselfr"   r#   r$   r%   r&   r'   r)   r*   r+   r,   r   Ú	__class__s               €úu/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/lightning/pytorch/loggers/mlflow.pyr3   zMLFlowLogger.__init__t   sË   ø€ õ !Ü%¤cÔ*;Ó&<Ó=Ð=ØÐ"Õ+HÜ%Ð&LÓMÐMÜ‰ÑÔÙÜ3Ð4°X°JÐ?ˆLà /ˆÔØ-1ˆÔØ)ˆÔØ!ˆŒØˆŒØˆŒ	Ø#ˆŒØ46ˆÔØ?CˆÔ!ØˆŒØ"3ˆÔØ'2Ð':¡ÀÐP[Ð@\ˆÔØ!ˆÔå0á*¨<Ó8ˆÕó    Úreturnc                 óf  — ddl }| j                  r| j                  S |j                  | j                  «       | j
                  �S| j                  j                  | j
                  «      }|j                  j                  | _	        d| _        | j                  S | j                  €¡| j                  j                  | j                  «      }|�!|j                  dk7  r|j                  | _	        nYt        j                  d| j                  › d�«       | j                  j                  | j                  | j                   ¬«      | _	        | j
                  €Ð| j"                  �h| j$                  xs i | _        ddlm} || j$                  v r&t        j                  d	|› d
| j"                  › d�«       | j"                  | j$                  |<   t+        «       }| j                  j-                  | j                   || j$                  «      ¬«      }|j                  j.                  | _        d| _        | j                  S )z×Actual MLflow object. To use MLflow features in your :class:`~lightning.pytorch.core.LightningModule` do the
        following.

        Example::

            self.logger.experiment.some_mlflow_function()

        r   NTÚdeletedzExperiment with name z not found. Creating it.)Únamer*   )ÚMLFLOW_RUN_NAMEzThe tag z3 is found in tags. The value will be overridden by ú.)Úexperiment_idr%   )r   r@   rB   Úset_tracking_urir7   r9   Úget_runÚinforM   r6   Úget_experiment_by_namer5   Úlifecycle_stageÚlogÚwarningÚcreate_experimentr>   r8   r%   Úmlflow.utils.mlflow_tagsrK   Ú_get_resolve_tagsÚ
create_runr+   )rC   r   ÚrunÚexptrK   Úresolve_tagss         rE   Ú
experimentzMLFlowLogger.experiment›   sÛ  € ó 	à×ÒØ×&Ñ&Ð&à×Ñ × 2Ñ 2Ô3à�<‰<Ð#Ø×%Ñ%×-Ñ-¨d¯l©lÓ;ˆCØ"%§(¡(×"8Ñ"8ˆDÔØ $ˆDÔØ×&Ñ&Ð&à×ÑÐ&Ø×&Ñ&×=Ñ=¸d×>SÑ>SÓTˆDØÐ D×$8Ñ$8¸IÒ$EØ&*×&8Ñ&8�Õ#ä—‘Ð3°D×4IÑ4IÐ3JÐJbÐcÔdØ&*×&9Ñ&9×&KÑ&KØ×.Ñ.À$×BYÑBYð 'Ló '�Ô#ð �<‰<ÐØ�~‰~Ð)Ø ŸI™IšO¨�”	åDà" d§i¡iÑ/Ü—K‘KØ" ?Ð"3Ð3fÐgk×guÑguÐfvÐvwÐxôð .2¯^©^�—	‘	˜/Ñ*ä,Ó.ˆLØ×%Ñ%×0Ñ0¸t×?RÑ?RÑYeÐfj×foÑfoÓYpÐ0ÓqˆCØŸ8™8Ÿ?™?ˆDŒLØ ˆÔØ×"Ñ"Ð"rF   c                 ó2   — | j                   }| j                  S )zqCreate the experiment if it does not exist to get the run id.

        Returns:
            The run id.

        )r\   r9   ©rC   Ú_s     rE   r+   zMLFlowLogger.run_idÏ   s   € ð �O‰OˆØ�|‰|ÐrF   c                 ó2   — | j                   }| j                  S )zCreate the experiment if it does not exist to get the experiment id.

        Returns:
            The experiment id.

        )r\   r6   r^   s     rE   rM   zMLFlowLogger.experiment_idÚ   s   € ð �O‰OˆØ×"Ñ"Ð"rF   Úparamsc           
      ó\  — t        |«      }t        |«      }ddlm} |j	                  «       D ��cg c]  \  }} ||t        |«      d d ¬«      ‘Œ }}}t        dt        |«      d«      D ];  } | j                  j                  d| j                  |||dz    dœ| j                  ¤Ž Œ= y c c}}w )Nr   )ÚParaméú   )ÚkeyÚvalueéd   )r+   ra   © )r   r   Úmlflow.entitiesrc   Úitemsr0   ÚrangeÚlenr\   Ú	log_batchr+   r?   )rC   ra   rc   ÚkÚvÚparams_listÚidxs          rE   Úlog_hyperparamszMLFlowLogger.log_hyperparamså   s«   € ô ! Ó(ˆÜ˜vÓ&ˆå)ð EKÇLÁLÃN×S¹D¸A¸q‘u ¬#¨a«&°°#¨,Ö7ÐSˆÑSô ˜œC Ó,¨cÓ2ò 	yˆCØ%ˆD�O‰O×%Ñ%Ðx¨T¯[©[ÀÈSÐSVÐY\ÑS\ÐA]ÑxÐae×awÑawÓxñ	yùó Ts   ° B(ÚmetricsÚstepc           
      óP  — t         j                  dk(  sJ d«       ‚ddlm} t	        || j
                  | j                  «      }g }t        t        «       dz  «      }|j                  «       D ]‡  \  }}t        |t        «      rt        j                  d|› d|› d�«       Œ3t        j                  dd	|«      }||k7  rt!        d
|› d|› d�t"        ¬«       |}|j%                   |||||xs d¬«      «       Œ‰  | j&                  j(                  d| j*                  |dœ| j,                  ¤Ž y )Nr   z-experiment tried to log from global_rank != 0)ÚMetriciè  z$Discarding metric with string value ú=rL   z[^a-zA-Z0-9_/. -]+r!   zVMLFlow only allows '_', '/', '.' and ' ' special characters in metric name. Replacing z with )Úcategory)re   rf   Ú	timestamprt   )r+   rs   rh   )r   Úrankri   rv   r   r=   ÚLOGGER_JOIN_CHARÚintr   rj   Ú
isinstancer0   rS   rT   ÚreÚsubr   ÚRuntimeWarningÚappendr\   rm   r+   r?   )	rC   rs   rt   rv   Úmetrics_listÚtimestamp_msrn   ro   Únew_ks	            rE   Úlog_metricszMLFlowLogger.log_metricsõ   s  € ô ×"Ñ" aÒ'ÐXÐ)XÓXÐ'å*ä˜g t§|¡|°T×5JÑ5JÓKˆØ%'ˆäœ4›6 D™=Ó)ˆØ—M‘M“Oò 	`‰DˆAˆqÜ˜!œSÔ!Ü—‘ÐBÀ1À#ÀQÀqÀcÈÐKÔLØä—F‘FÐ/°°QÓ7ˆEØ�EŠzÜð"Ø"#  F¨5¨'°ð4ä+õð
 �Ø×Ñ¡¨1°AÀÐTXÒT]Ð\]Ô ^Õ_ð	`ð 	"ˆ�‰×!Ñ!Ðe¨¯©¸lÑeÈd×NdÑNdÓerF   Ústatusc                 ó2  — | j                   sy |dk(  rd}n|dk(  rd}n|dk(  rd}| j                  r| j                  | j                  «       | j                  j	                  | j
                  «      r'| j                  j                  | j
                  |«       y y )NÚsuccessÚFINISHEDÚfailedÚFAILEDÚfinished)r@   r<   Ú_scan_and_log_checkpointsr\   rO   r+   Úset_terminated)rC   r†   s     rE   ÚfinalizezMLFlowLogger.finalize  s‰   € ð × Ò ØØ�YÒØ‰FØ�xÒØ‰FØ�zÒ!ØˆFð ×$Ò$Ø×*Ñ*¨4×+DÑ+DÔEà�?‰?×"Ñ" 4§;¡;Ô/Ø�O‰O×*Ñ*¨4¯;©;¸Õ?ð 0rF   c                 óz   — | j                   j                  t        «      r| j                   t        t        «      d S y)zÕThe root file directory in which MLflow experiments are saved.

        Return:
            Local path to the root experiment directory if the tracking uri is local.
            Otherwise returns `None`.

        N)r7   Ú
startswithr4   rl   ©rC   s    rE   r&   zMLFlowLogger.save_dir$  s6   € ð ×Ñ×(Ñ(Ô)>Ô?Ø×%Ñ%¤cÔ*?Ó&@Ð&BÐCÐCØrF   c                 ó   — | j                   S )zQGet the experiment id.

        Returns:
            The experiment id.

        )rM   r’   s    rE   rJ   zMLFlowLogger.name2  s   € ð ×!Ñ!Ð!rF   c                 ó   — | j                   S )zCGet the run id.

        Returns:
            The run id.

        )r+   r’   s    rE   ÚversionzMLFlowLogger.version=  s   € ð �{‰{ÐrF   Úcheckpoint_callbackc                 ó¬   — | j                   dk(  s| j                   du r!|j                  dk(  r| j                  |«       y | j                   du r|| _        y y )Nr(   Téÿÿÿÿ)r:   Ú
save_top_kr�   r<   )rC   r–   s     rE   Úafter_save_checkpointz"MLFlowLogger.after_save_checkpointH  sR   € ð �?‰?˜eÒ# t§¡¸$Ñ'>ÐCV×CaÑCaÐegÒCgØ×*Ñ*Ð+>Õ?Ø�_‰_ Ñ$Ø(;ˆDÕ%ð %rF   c                 óh  — t        || j                  «      }|D �]m  \  }}}}t        |t        «      r|j	                  «       n|t        |«      j                  dD �ci c]  }t        ||«      r|t        ||«      “Œ c}dœ}||j                  k(  rddgndg}	t        |«      j                  }
| j                  j                  | j                  ||
«       t        j                  «       5 }t!        |› d�d«      5 }t#        j$                  ||d¬«       d d d «       t!        |› d	�d«      5 }|j'                  t)        |	«      «       d d d «       | j                  j+                  | j                  ||
«       d d d «       || j                  |<   �Œp y c c}w # 1 sw Y   Œ‚xY w# 1 sw Y   Œ\xY w# 1 sw Y   Œ9xY w)
N)ÚmonitorÚmodeÚ	save_lastr™   Úsave_weights_onlyÚ_every_n_train_stepsÚ_every_n_val_epochs)ÚscoreÚoriginal_filenameÚ
CheckpointÚlatestÚbestz/metadata.yamlÚwF)Údefault_flow_stylez/aliases.txt)r   r;   r}   r   Úitemr   rJ   ÚhasattrÚgetattrÚbest_model_pathÚstemr\   Úlog_artifactr9   ÚtempfileÚTemporaryDirectoryÚopenÚyamlÚdumpÚwriter0   Úlog_artifacts)rC   r–   ÚcheckpointsÚtÚpÚsÚtagrn   ÚmetadataÚaliasesÚartifact_pathÚtmp_dirÚtmp_file_metadataÚtmp_file_aliasess                 rE   r�   z&MLFlowLogger._scan_and_log_checkpointsP  s«  € ä'Ð(;¸T×=TÑ=TÓUˆð (ó *	+‰LˆAˆq�!�Sô &0°´6Ô%:˜Ÿ™œÀÜ%)¨!£W§\¡\ðöàô Ð2°AÔ6ð ”wÐ2°AÓ6Ñ6òñ	ˆHð& -.Ð1D×1TÑ1TÒ,T�x Ñ(Ð[cÐZdˆGô ! ›GŸL™LˆMð �O‰O×(Ñ(¨¯©°q¸-ÔHô ×,Ñ,Ó.ð 
T°'ä˜W˜I ^Ð4°cÓ:ð UÐ>OÜ—I‘I˜hÐ(9ÈeÕT÷Uô ˜W˜I \Ð2°CÓ8ð 9Ð<LØ$×*Ñ*¬3¨w«<Ô8÷9ð —‘×-Ñ-¨d¯l©l¸GÀ]ÔS÷
Tð *+ˆD×#Ñ# AÓ&ñU*	+ùò
÷4Uð Uú÷9ð 9ú÷
Tð 
TúsB   Á F
Ã&F(Ã6FÄF(Ä&FÅ/F(ÆFÆF(ÆF%Æ!F(Æ(F1	)rG   r   ©N)rˆ   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r{   ÚosÚgetenvr0   r   Údictr   r
   Úboolr3   Úpropertyr   r\   r+   rM   r   r   r   r   rr   r   Úfloatr|   r…   r�   r&   rJ   r•   r   rš   r�   Ú__classcell__)rD   s   @rE   r   r   1   sˆ  ø„ ñ>ð@ Ðð  0Ø"&Ø&/ b§i¡iÐ0EÓ&FØ)-Ø",Ø16ØØ+/Ø $Ø&*ñ%9àð%9ð ˜3‘-ð%9ð ˜s‘mð	%9ð
 �t˜C ˜H‘~Ñ&ð%9ð ˜3‘-ð%9ð Ð-Ñ.ð%9ð ð%9ð $ C™=ð%9ð ˜‘ð%9ð ˜d‘^õ%9ðN Øò0#ó ó ð0#ðd ð˜ ™ò ó ðð ð#˜x¨™}ò #ó ð#ð Øðy e¨D°°c°©N¸IÐ,EÑ&Fð yÈ4ò yó ó ðyð Øñf 7¨3°¨:Ñ#6ð f¸hÀs¹mð fÐW[ò fó ó ðfð4 Øñ@˜sð @°4ò @ó ó ð@ð" Øð
˜( 3™-ò 
ó ó ð
ð Øð"�h˜s‘mò "ó ó ð"ð Øð˜ #™ò ó ó ðð ð<¸ð <ÈTò <ó ð<ð/+¸_ð /+ÐQU÷ /+rF   r   rG   c                  óh   — ddl m}  t        | d«      rddlm} |S t        | d«      rddlm} |S d„ }|S )Nr   )Úcontextr[   )r[   Úregistryc                 ó   — | S rÁ   rh   )r%   s    rE   ú<lambda>z#_get_resolve_tags.<locals>.<lambda>Œ  s   €  D€ rF   )rA   rÎ   rª   Úmlflow.tracking.contextr[   Ú mlflow.tracking.context.registry)rÎ   r[   s     rE   rW   rW   ‚  s@   € Ý'ô ˆw˜Ô'Ý8ð Ðô 
�˜*Ô	%ÝAð Ðñ )ˆàÐrF   )2rÅ   ÚloggingrÆ   r~   r¯   Úargparser   Úcollections.abcr   Úpathlibr   r   Útypingr   r   r	   r
   r   r   r²   Ú lightning_utilities.core.importsr   Útorchr   Útyping_extensionsr   Ú!lightning.fabric.utilities.loggerr   r   r   Ú,lightning.pytorch.callbacks.model_checkpointr   Ú lightning.pytorch.loggers.loggerr   r   Ú#lightning.pytorch.loggers.utilitiesr   Ú%lightning.pytorch.utilities.rank_zeror   r   rA   r   Ú	getLoggerrÂ   rS   r4   r.   r1   r   rW   rh   rF   rE   ú<module>râ      s›   ðñó
 Û 	Û 	Û Ý Ý #Ý Ý ß I× Iã Ý =Ý Ý &ç YÑ YÝ Hß IÝ Aß PáÝ,à€g×Ñ˜Ó!€ØÐ Ù$ _°hÓ?Ð Ù 0°À(Ó KÐ ôN+�6ô N+ðb
˜8ô rF   