o
    Xεi                     @   s   d dl Z d dl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 e
 r?d dlmZ d dlmZ d dlmZ G dd	 d	eZdS )
    N)BaseDashboardLogger)is_mlflow_available)rank_zero_only)MlflowClient)resolve_tags)MLFLOW_RUN_NAMEc                       s  e Zd Z	d1dededefddZdd Zd	d
 Zdd Zdd Zdd Z	d1ddZ
dd Zedd Zedd Zedd Z fddZ fddZ fdd Z fd!d"Z fd#d$Z fd%d&Z fd'd(Z fd)d*Z fd+d,Zd-d. Ze fd/d0Z  ZS )2MLFlowLoggerNlog_uri
model_nametagsc                 C   s   || _ ttj|d| _| j|}|d u r | jj|d| _n|j| _|d ur1| j	| jt
| | jj| jt|d}|jj| _d S )N)tracking_uri)name)experiment_idr   )r
   r   ospathjoinclientget_experiment_by_namecreate_experimentr   set_experiment_tagr   
create_runr   inforun_id)selfr	   r
   r   
experimentrun r   Q/home/ubuntu/.local/lib/python3.10/site-packages/trainer/logging/mlflow_logger.py__init__   s   zMLFlowLogger.__init__c                 C   s   d}|  D ]U\}}| dkr| jd||| | n8| jd||| | | jd||| | | jd||| | | jd||| | |d7 }qd S )N   zlayer{}-{}/valuezlayer{}-{}/maxzlayer{}-{}/minzlayer{}-{}/meanzlayer{}-{}/std)	named_parametersnumelr   
log_metricformatmaxminmeanstd)r   modelstep	layer_numr   paramr   r   r   model_weights*   s   
zMLFlowLogger.model_weightsc                 C   s   |  dd|  dd d S )Nzmodel-configz<pre>z</pre>r   )add_textto_json)r   configr   r   r   
add_config9      zMLFlowLogger.add_configc                 C   s   | j | j||| d S N)r   r"   r   )r   titlevaluer)   r   r   r   
add_scalar<   s   zMLFlowLogger.add_scalarc                 C   s   | j | j|d|| d S )Nz	{}/{}.txt)r   log_textr   r#   )r   r3   textr)   r   r   r   r-   ?   r1   zMLFlowLogger.add_textc                 C   s   | j |d|| d S )Nz	{}/{}.png)r   
log_figurer#   )r   r3   figurer)   r   r   r   
add_figureB   s   zMLFlowLogger.add_figurec                 C   s   | j | j| d S r2   )r   log_artifactsr   )r   file_or_dirr   artifact_typealiasesr   r   r   add_artifactE   s   zMLFlowLogger.add_artifactc                 C   s    | j | j|d||| d S )Nz	{}/{}.wav)r   	log_audior   r#   )r   r3   audior)   sample_rater   r   r   	add_audioH   s    zMLFlowLogger.add_audioc                 C   sD   |  D ]\}}t|r| }| j| jd|||| qd S )Nz{}-{})itemstorch	is_tensoritemr   r"   r   r#   )r   
scope_namestatsr)   keyr4   r   r   r   add_scalarsK   s
   
zMLFlowLogger.add_scalarsc              
   C   s2   |  D ]\}}| j| j|d||| qd S )Nz{}/{}/{}.png)rD   r   r8   r   r#   )r   rH   figuresr)   rJ   r4   r   r   r   add_figuresR   s   zMLFlowLogger.add_figuresc              
   C   s   |  D ]=\}}|jdkr|d}z"tjdd}t||| | j| j	|d
||| t| W q tyA   t  Y qw d S )Nfloat16float32z.wav)suffixz{}/{}/{}.wav)rD   dtypeastypetempfileNamedTemporaryFilesfwriter   log_artifactr   r#   shutilrmtreeRuntimeError	traceback	print_exc)r   rH   audiosr)   rB   rJ   r4   tmp_audio_pathr   r   r   
add_audiosW   s    

zMLFlowLogger.add_audiosc                    $   | j | jdd t || d S NModetraining)r   set_tagr   supertrain_step_statsr   r)   rI   	__class__r   r   rf   h      zMLFlowLogger.train_step_statsc                    r`   ra   )r   rd   r   re   train_epoch_statsrg   rh   r   r   rk   l   rj   zMLFlowLogger.train_epoch_statsc                    r`   ra   )r   rd   r   re   train_figuresr   r)   rL   rh   r   r   rl   p   rj   zMLFlowLogger.train_figuresc                    &   | j | jdd t ||| d S ra   )r   rd   r   re   train_audiosr   r)   r]   rB   rh   r   r   ro   t      zMLFlowLogger.train_audiosc                    r`   Nrb   
evaluation)r   rd   r   re   
eval_statsrg   rh   r   r   rt   x   rj   zMLFlowLogger.eval_statsc                    r`   rr   )r   rd   r   re   eval_figuresrm   rh   r   r   ru   |   rj   zMLFlowLogger.eval_figuresc                    rn   rr   )r   rd   r   re   eval_audiosrp   rh   r   r   rv      rq   zMLFlowLogger.eval_audiosc                    rn   Nrb   test)r   rd   r   re   test_audiosrp   rh   r   r   ry      rq   zMLFlowLogger.test_audiosc                    r`   rw   )r   rd   r   re   test_figuresrm   rh   r   r   rz      rj   zMLFlowLogger.test_figuresc                 C   s   d S r2   r   )r   r   r   r   flush   s   zMLFlowLogger.flushc                    sB   t  | |dkrdn|}| j| jr| j| j| d S d S )NsuccessFINISHED)re   finalizer   get_runr   set_terminated)r   statusrh   r   r   finish   s
   zMLFlowLogger.finishr2   )__name__
__module____qualname__strr   r,   r0   r5   r-   r:   r?   rC   r   rK   rM   r_   rf   rk   rl   ro   rt   ru   rv   ry   rz   r{   r   __classcell__r   r   rh   r   r      sD    




r   )r   rX   rS   r[   	soundfilerU   rE    trainer.logging.base_dash_loggerr   trainer.trainer_utilsr   trainer.utils.distributedr   mlflow.trackingr    mlflow.tracking.context.registryr   mlflow.utils.mlflow_tagsr   r   r   r   r   r   <module>   s    