o
    }oi                  	   @   s
  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
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mZmZ d dlmZ d dlmZ zd dl m!Z!m"Z" dZ#W n e$e%fyq   dZ#Y nw eG dd dZ&G dd deZ'dS )    N)	Namespace)	dataclass)Path)AnyListLiteralMappingOptionalUnion)
Checkpoint)Logger)AttributeDict)apply_to_collection)
DictConfig
ListConfig	OmegaConf)Tensor)logging)OutputModelTaskTFc                   @   s   e Zd ZU dZee ed< dZee ed< dZee	 ed< dZ
ee ed< dZeee  ed< dZee	 ed< dZee	 ed	< dZee	 ed
< dS )ClearMLParamsNprojecttaskFconnect_pytorch
model_nametags	log_modellog_cfglog_metrics)__name__
__module____qualname__r   r	   str__annotations__r   r   boolr   r   r   r   r   r    r%   r%   U/home/ubuntu/.local/lib/python3.10/site-packages/nemo/utils/loggers/clearml_logger.pyr   '   s   
 r   c                   @   s   e Zd ZedefddZedefddZ	d&deded	ed
ededdfddZ	d'ddZ
d(deeef dee ddfddZ				d)dedee deee  dedee ddfddZdeddfddZd*ded  ddfd!d"Zd#eddfd$d%ZdS )+ClearMLLoggerreturnc                 C      | j jS N)clearml_tasknameselfr%   r%   r&   r,   4      zClearMLLogger.namec                 C   r)   r*   )r+   idr-   r%   r%   r&   version8   r/   zClearMLLogger.version.nemoclearml_cfglog_dirprefixsave_best_modelpostfixNc              
   C   s  t stdd | _d | _|| _tjtjtj	|d|| | _
|| _|| _d | _d | _d| _td|jr:|jnd| _td|jrG|jnd| j | _dg}|jr[||j tj| j| jd|jid|d	| _|jrr|j}n
| jry| j}n| j}|jrt|| j|dd
| _d S d S )NzFound create_clearml_logger is True.But ClearML not found. Please see the README for installation instructions:https://github.com/allegroai/clearmlcheckpointsTCLEARML_PROJECTNeMoCLEARML_TASKzTrainer pytorch)project_name	task_nameauto_connect_frameworks
output_urir   )r,   r   r   	framework)HAVE_CLEARML_LOGGERImportErrorr+   clearml_modelr3   ospathabspath
expanduserjoinpath_nemo_modelr6   r5   previos_best_model_pathlast_metricssave_blockedgetenvr   r=   r   r>   r   extendr   initr   r   r   r   )r.   r3   r4   r5   r6   r7   r   r   r%   r%   r&   __init__<   sJ   "
zClearMLLogger.__init__c                 O   sz   | j r9| jjr;t|trt|}n	t|trt|}t|t	t
ftjdd}t|tt}t|}| j j|d d S d S d S )NT)resolve)config_text)rD   r3   r   
isinstancer   varsr   dictr   r   r   r   to_containerr   r"   to_yamlupdate_design)r.   paramsargskwargsr%   r%   r&   log_hyperparamsm   s   



zClearMLLogger.log_hyperparamsmetricsstepc                 C   s2   | j r| jjrdd | D }|| _d S d S d S )Nc                 S   sP   i | ]$\}}|t t|tkr| n|t tt|tkr | n|d qS ))valuetype)r"   ra   r   item).0kvr%   r%   r&   
<dictcomp>z   s    z-ClearMLLogger.log_metrics.<locals>.<dictcomp>)rD   r3   r   itemsrL   )r.   r^   r_   r%   r%   r&   r   x   s   
zClearMLLogger.log_metricskeycolumnsdata	dataframec                 C   sx   d }|d ur|}|d ur||_ |d ur)|}t|t|d ks#J d|d| |d ur:| jjj||||d d S d S )Nr   z?number of column names should match the total number of columns)titleseries	iteration
table_plot)ri   leninsertr+   loggerreport_table)r.   rh   ri   rj   rk   r_   tabler%   r%   r&   	log_table   s   zClearMLLogger.log_tablecheckpoint_callbackc                 C   sZ   | j r+| jr#| jrd| _d S tj|jsd S | j|jkrd S |j| _| | j	 d S d S )NF)
rD   r6   rM   rE   rF   existsbest_model_pathrK   
_log_modelrJ   )r.   rv   r%   r%   r&   after_save_checkpoint   s   z#ClearMLLogger.after_save_checkpointsuccessstatus)r{   failedabortedc                 C   sF   |dkr| j   d S |dkr| j   d S |dkr!| j   d S d S )Nr{   r}   r~   )r+   mark_completedmark_failedmark_stopped)r.   r|   r%   r%   r&   finalize   s   zClearMLLogger.finalize	save_pathc                 C   sr   | j r7tj|r-| j j|| jjp| j ddd | jj	r(| j
r(| j | j
 d| _d S td|  d S d S )NFT)weights_filename
upload_uriauto_delete_file
is_packagez7Logging model enabled, but cant find .nemo file! Path: )rD   rE   rF   rw   update_weightsr+   storage_uri_get_default_report_storage_urir3   r   rL   set_all_metadatarM   r   warning)r.   r   r%   r%   r&   ry      s   
zClearMLLogger._log_model)r2   )r(   Nr*   )NNNN)r{   )r   r    r!   propertyr"   r,   r1   r   r$   rQ   r]   r   floatr	   intr   r   r   ru   r   rz   r   r   ry   r%   r%   r%   r&   r'   3   sR    

1$

r'   )(rE   argparser   dataclassesr   pathlibr   typingr   r   r   r   r	   r
   pandaspdlightning.pytorch.callbacksr   lightning.pytorch.loggersr   #lightning.pytorch.utilities.parsingr   #lightning_utilities.core.apply_funcr   	omegaconfr   r   r   torchr   
nemo.utilsr   clearmlr   r   rB   rC   ModuleNotFoundErrorr   r'   r%   r%   r%   r&   <module>   s,    