o
    oi                     @   s   d Z ddlmZ ddl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ee d	ed
eeef fddZdeded
eeeeeef  fddZdddZdS )zUtilities for loggers.    )Path)AnyListTupleUnion)TensorN)
Checkpoint_loggers	separatorreturnc                 C   s0   t | dkr| d jS |tdd | D S )N   r   c                 s   s    | ]}t |jV  qd S N)strversion).0logger r   W/home/ubuntu/.local/lib/python3.10/site-packages/lightning/pytorch/loggers/utilities.py	<genexpr>   s    z_version.<locals>.<genexpr>)lenr   joindictfromkeys)r
   r   r   r   r   _version   s   
r   checkpoint_callbacklogged_model_timec                    s   i }t | drt | dr| jdf|| j< t | dr&t | dr&| jdf|| j< t | dr;| j D ]
\}}|df||< q0td	d
 | D } fdd|D }|S )zReturn the checkpoints to be logged.

    Args:
        checkpoint_callback: Checkpoint callback reference.
        logged_model_time: dictionary containing the logged model times.

    last_model_pathcurrent_scorelatestbest_model_pathbest_model_scorebestbest_k_modelsbest_kc                 s   s:    | ]\}\}}t | rt | j|||fV  qd S r   )r   is_filestatst_mtime)r   pstagr   r   r   r   4   s    
z$_scan_checkpoints.<locals>.<genexpr>c                    s0   g | ]}|d   vs |d   |d k r|qS )r   r   r   )r   cr   r   r   
<listcomp>7   s   0 z%_scan_checkpoints.<locals>.<listcomp>)hasattrr   r   r!   r    r#   itemssorted)r   r   checkpointskeyvaluer   r,   r   _scan_checkpoints    s   	
r4   trainer
pl.Trainerc                 C   s  | j sd S | j}| jd ur| jjnd}d }|jrf|rf| jj}|j}g }| | @ D ])}|| || }}	t|t|	ksOt|trKt	|t	|	ksO||	krT|
| q+|r_td| di ||}n|jrm|j}n|rs| jj}| j D ]}
|d ur|
| |
| |
  qvd S )NFz&Error while merging hparams: the keys zg are present in both the LightningModule's and LightningDataModule's hparams but have different values.)r
   lightning_module
datamodule_log_hyperparamshparams_initialkeystype
isinstancer   idappendRuntimeErrorlog_hyperparams	log_graphsave)r5   	pl_moduledatamodule_log_hyperparamsr:   datamodule_hparamslightning_hparamsinconsistent_keysr2   lm_valdm_valr   r   r   r   r9   ;   sB   






r9   )r	   )r5   r6   r   N)__doc__pathlibr   typingr   r   r   r   torchr   lightning.pytorchpytorchpllightning.pytorch.callbacksr   r   intr   r   floatr4   r9   r   r   r   r   <module>   s   $&