o
    1 i;0                     @   s   d dl Z d dlmZmZ d dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ erDd d	lmZ e eZeeejejejej gZ!ee	j"d
ddddeG dd
 d
e
Z#eG dd deZ$dS )    N)TYPE_CHECKINGDict)TRAINING_ITERATION)_LOGGER_DEPRECATION_WARNINGLoggerLoggerCallback)TIME_TOTAL_STIMESTEPS_TOTAL)flatten_dict)
Deprecated	PublicAPI)log_once)Trial	TBXLoggerz'ray.tune.tensorboardx.TBXLoggerCallback)oldnewT)messagewarningc                   @   sj   e Zd ZdZeeeeee	dfZ
ejejejejejfZdd ZdefddZdd	 Zd
d Zdd ZdS )r   TensorBoardX Logger.

    Note that hparams will be written only after a trial has terminated.
    This logger automatically flattens nested dicts to show on TensorBoard:

        {"a": {"b": 1, "c": 2}} -> {"a/b": 1, "a/c": 2}
    Nc                 C   sN   zddl m} W n ty   tdrtd  w || jdd| _d | _d S )Nr   SummaryWritertbx-install1pip install "ray[tune]" to see TensorBoard files.   Z
flush_secs)	tensorboardXr   ImportErrorr   loggerinfoZlogdir_file_writerlast_resultselfr    r#   h/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/ray/tune/logger/tensorboardx.py_init(   s   

zTBXLogger._initresultc                 C   s  | tp|t }| }dddttfD ]	}||v r||= qt|dd}ddg}i }| D ]\}}	d||g }
t|	t	t
rTt|	sT|	||
< | jj|
|	|d q.t|	tr_t|	d	ksjt|	tjr|	jd	kr|	||
< t|	tjr|	jd
kr| jj|
|	|d q.t|	tjr|	jdkr| jj|
|	|d q.t|	tjr|	jdkr| jj|
|	|dd q.z| jj|
|	|d W q. ttfy   tdrtd|
|	t| j Y q.w q.|| _ | j!  d S Nconfigpid	timestamp/	delimiterZrayZtune)global_stepr               )r.   ZfpsZinvalid_tbx_valuez6You are trying to log an invalid value ({}={}) via {}!)"getr	   r   copyr   r
   itemsjoin
isinstancetupleVALID_SUMMARY_TYPESnpisnanr   
add_scalarlistlenndarraysizendim	add_image
add_images	add_videoadd_histogram
ValueError	TypeErrorr   r   r   formattype__name__r    flush)r"   r&   steptmpkflat_resultpathvalid_resultattrvalue	full_attrr#   r#   r$   	on_result2   sf   

zTBXLogger.on_resultc                 C   s   | j d ur| j   d S d S )N)r   rK   r"   r#   r#   r$   rK   o   s   
zTBXLogger.flushc                 C   sZ   | j d ur+| jr$| jjr$| jr$t| jdd}dd | D }| | | j   d S d S )Nr+   r,   c                 S   $   i | ]\}}t |ttr||qS r#   r7   r8   r9   .0rN   rS   r#   r#   r$   
<dictcomp>w       z#TBXLogger.close.<locals>.<dictcomp>)r   trialevaluated_paramsr    r
   r5   _try_log_hparamsclose)r"   rO   scrubbed_resultr#   r#   r$   r`   s   s   

zTBXLogger.closec           
         s   t  jj} fdd| D } fdd| D }||  fdd| D }|r6tdt| ddlm	} z!|||d\}}}	 j
j|  j
j|  j
j|	 W d S  tyl   td	 Y d S w )
Nc                    "   i | ]\}}t | jr||qS r#   r7   VALID_HPARAMSrZ   rN   vrV   r#   r$   r[      
    z.TBXLogger._try_log_hparams.<locals>.<dictcomp>c                    &   i | ]\}}t | jr|| qS r#   r7   VALID_NP_HPARAMStolistre   rV   r#   r$   r[          
c                    (   i | ]\}}t | j j s||qS r#   r7   rd   rj   re   rV   r#   r$   r[          KRemoved the following hyperparameter values when logging to tensorboard: %sr   hparamsZhparam_dictZmetric_dicthTensorboardX failed to log hparams. This may be due to an unsupported type in the hyperparameter values.)r
   r]   r^   r5   updater   r   strtensorboardX.summaryrr   r   file_writeradd_summary	Exception	exception)
r"   r&   flat_paramsscrubbed_params	np_paramsremovedrr   experiment_tagsession_start_tagsession_end_tagr#   rV   r$   r_      s:   




zTBXLogger._try_log_hparams)rJ   
__module____qualname____doc__rv   boolintfloatr=   rI   rd   r:   bool_float32float64int32int64rj   r%   r   rU   rK   r`   r_   r#   r#   r#   r$   r      s    
=c                   @   s   e Zd ZdZdgZeeeee	e
dfZejejejejejfZdd Zddd	Zd
edddefddZddddefddZdddefddZdS )TBXLoggerCallbackr   zevents.out.tfevents.*Nc                 C   sJ   zddl m} || _W n ty   tdrtd  w i | _i | _d S )Nr   r   r   r   )	r   r   _summary_writer_clsr   r   r   r   _trial_writer_trial_resultr!   r#   r#   r$   __init__   s   


zTBXLoggerCallback.__init__r]   r   c                 C   sD   || j v r| j |   |  | j|jdd| j |< i | j|< d S )Nr   r   )r   r`   Zinit_local_pathr   Z
local_pathr   )r"   r]   r#   r#   r$   log_trial_start   s   
z!TBXLoggerCallback.log_trial_start	iterationr&   c                 C   s  || j vr
| | |tp|t }| }dddttfD ]	}||v r'||= qt|dd}ddg}i }	| D ]\}
}d	||
g }t
|ttr`t|s`||	|< | j | j|||d q8t
|trkt|d	ksvt
|tjr|jd	kr||	|< t
|tjr|jd
kr| j | j|||d q8t
|tjr|jdkr| j | j|||d q8t
|tjr|jdkr| j | j|||dd q8z| j | j|||d W q8 ttfy   tdrtd||t| j  Y q8w q8|	| j!|< | j | "  d S r'   )#r   r   r3   r	   r   r4   r   r
   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r   r   r   rH   rI   rJ   r   rK   )r"   r   r]   r&   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r#   r#   r$   log_trial_result   sn   









z"TBXLoggerCallback.log_trial_resultFfailedc                 C   st   || j v r8|r'|jr'| j| r't| j| dd}dd | D }| || | j |   | j |= | j|= d S d S )Nr+   r,   c                 S   rW   r#   rX   rY   r#   r#   r$   r[     r\   z3TBXLoggerCallback.log_trial_end.<locals>.<dictcomp>)r   r^   r   r
   r5   r_   r`   )r"   r]   r   rO   ra   r#   r#   r$   log_trial_end  s   
zTBXLoggerCallback.log_trial_endc                    s   t |j} fdd| D } fdd| D }||  fdd| D }|r5tdt| ddlm} z'|||d\}}	}
 j	| j
|  j	| j
|	  j	| j
|
 W d S  tyq   td	 Y d S w )
Nc                    rb   r#   rc   re   rV   r#   r$   r[   "  rg   z6TBXLoggerCallback._try_log_hparams.<locals>.<dictcomp>c                    rh   r#   ri   re   rV   r#   r$   r[   &  rl   c                    rm   r#   rn   re   rV   r#   r$   r[   .  ro   rp   r   rq   rs   rt   )r
   r^   r5   ru   r   r   rv   rw   rr   r   rx   ry   rz   r{   )r"   r]   r&   r|   r}   r~   r   rr   r   r   r   r#   rV   r$   r_     s:   





z"TBXLoggerCallback._try_log_hparams)r]   r   )F)rJ   r   r   r   Z_SAVED_FILE_TEMPLATESrv   r   r   r   r=   rI   rd   r:   r   r   r   r   r   rj   r   r   r   r   r   r_   r#   r#   r#   r$   r      s    
	Br   )%loggingtypingr   r   numpyr:   Zray.air.constantsr   Zray.tune.logger.loggerr   r   r   Zray.tune.resultr   r	   Zray.tune.utilsr
   Zray.util.annotationsr   r   Zray.util.debugr   Zray.tune.experiment.trialr   	getLoggerrJ   r   r   r   r   r   r   r   r9   rH   r   r   r#   r#   r#   r$   <module>   s0    
 