o
    }oi&                     @   s   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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 G d	d
 d
ZdS )    N)Path)patch)ModelCheckpoint)WandbLogger)	lightning)NEMO_ENV_VARNAME_VERSION)NotFoundErrorc                   @   sR   e Zd Zejdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd ZdS )TestNeMoLoggerc                 C   s   t jddS )Ncpuaccelerator)nlTrainer)self r   T/home/ubuntu/.local/lib/python3.10/site-packages/tests/lightning/test_nemo_logger.pytrainer   s   zTestNeMoLogger.trainerc                 C   s   t jdd}t jdtddddd}|| |jd u sJ t|jdks'J t|jd	ks0J t	|jd
 ts:J t
|jd
 jdsGJ |jd
 jdksQJ d S )Nr
   r   Tcustom
wandb_logs)namesave_diroffline)update_logger_directorywandbr         znemo_experiments/wandb_logs)r   r   
NeMoLoggerr   setuptensorboardlenextra_loggersloggers
isinstancestrr   endswith_name)r   r   loggerr   r   r   test_loggers#   s   
zTestNeMoLogger.test_loggersc                 C   sN   d}t jd|d}||}t|jdksJ |jdksJ |jdks%J d S )Nexplicit_test_dirtestr   explicit_log_dir )r   r   r   r#   log_dirr   version)r   r   explicit_dirr&   	app_stater   r   r   test_explicit_log_dir2   s   
z$TestNeMoLogger.test_explicit_log_dirc                 C   sR   t jtd d urt jt= tjdd}||}|jtt	 d d ks'J d S )NF)use_datetime_versionnemo_experimentsdefault)
osenvirongetr   r   r   r   r-   r   cwd)r   r   r&   r0   r   r   r   test_default_log_dir;   s
   
"z#TestNeMoLogger.test_default_log_dirc                 C   s0   d}t jd|dd}||}|j|ksJ d S )Nzv1.0r)   F)r   r.   r2   )r   r   r   r.   )r   r   custom_versionr&   r0   r   r   r   test_custom_versionC   s   
z"TestNeMoLogger.test_custom_versionc                 C   sL   t jdd}td}|| |  W d    d S 1 sw   Y  d S )Nr)   )r   z3nemo.lightning.nemo_logger.logging.add_file_handler)r   r   r   r   assert_called_once)r   r   r&   mock_add_handlerr   r   r   test_file_logging_setupJ   s
   


"z&TestNeMoLogger.test_file_logging_setupc                 C   sv   t ddd}tjd|d}|| tdd |jD sJ tdd |jD }t|j	ds2J |j
dks9J d S )	N	test_ckptztest-{epoch:02d}-{val_loss:.2f})dirpathfilenamer)   )r   ckptc                 s   s    | ]}t |tV  qd S Nr"   PTLModelCheckpoint.0cbr   r   r   	<genexpr>V   s    z=TestNeMoLogger.test_model_checkpoint_setup.<locals>.<genexpr>c                 s   s    | ]
}t |tr|V  qd S rC   rD   rF   r   r   r   rI   W   s    )rE   r   r   r   any	callbacksnextr#   r@   r$   rA   )r   r   rB   r&   ptl_ckptr   r   r   test_model_checkpoint_setupQ   s   
z*TestNeMoLogger.test_model_checkpoint_setupc           	      C   s  t jtddurt jt= tt tjt	|d dd
| W d   n1 s+w   Y  tt tjt	|d d dd
| W d   n1 sPw   Y  tjt	|d d ddd
| t|d d d d	 }|jdd
 tt tj|dd
| W d   n1 sw   Y  t|d d d d	 d   tt tjt|d d d d	 dd
| W d   n1 sw   Y  t|d d d d	 d   t|d d d d	 d   t|d d d d	 d   tt tjt|d d d d	 dddd
| W d   n	1 s'w   Y  t|d d d d	 d   t|d d d d	 d   t|d d d d	 d   t|d d d d	 d   tt tjt|d d d d	 ddd
| W d   n	1 sw   Y  t|d d d d	 d   t|d d d d	 d   t|d d d d	 d   td t|d d d d	 d d jdd
 td t|d d d d	 d   t|d d d d	 d   tjt|d d d d	 dd
| t	|jt	t|d d d d	 d d ks3J tjdt	|d ddd}|
| tt|d d d d	 d  tjdd
| t|d d d d	 d }t|j | ks{J tjddd}t|d d d }|jdd
 t|d d d }t|d }|jdd
 tjd|d}|
| tjdt	|d
| t|j | ksJ dS ) z8Tests the resume capabilities of NeMoLogger + AutoResumeNtest_resumeT)resume_from_directoryresume_if_existsdoes_not_exist)rP   rQ   resume_ignore_no_checkpointr4   	version_0checkpoints)parentszmymodel--endzmymodel--end-unfinished)rP   rQ   resume_past_endrS   zmymodel--lastzmymodel--last-unfinishedr   zmymodel2--lastweightszmymodel3--lastzmymodel3--last-unfinishedz/test_resumeF)r   r-   r.   r2   )rQ   r
   )r   r&   dirpath_testlogsckptsr*   )rQ   rP   )r5   r6   r7   r   pytestraisesr   r   
AutoResumer#   r   r   mkdir
ValueErrorrmdirtouchunlinktimesleep	ckpt_pathr   shutilrmtreeresolver   )	r   r   tmp_pathpathr&   
checkpointdirpath_log_dirdirpath_checkpoint_dirdirpath_checkpointr   r   r   rO   [   s   



 
   
    
   
 
  


"
 zTestNeMoLogger.test_resumeN)__name__
__module____qualname__r\   fixturer   r'   r1   r9   r;   r>   rN   rO   r   r   r   r   r	      s    
	
r	   )r5   rg   rd   pathlibr   unittest.mockr   r\   lightning.pytorch.callbacksr   rE   lightning.pytorch.loggersr   nemor   r   nemo.constantsr   nemo.utils.exp_managerr   r	   r   r   r   r   <module>   s   