o
    ci5                     @   s   d dl Z d dl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mZmZ d dlmZ d dlmZmZ er>d dlmZ ee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)Path)TYPE_CHECKINGDictTextIO)EXPR_PROGRESS_FILE)_LOGGER_DEPRECATION_WARNINGLoggerLoggerCallback)flatten_dict)
Deprecated	PublicAPI)Trial	CSVLoggerzray.tune.csv.CSVLoggerCallback)oldnewT)messagewarningc                   @   s>   e Zd ZdZdd Zdd ZdefddZd	d
 Zdd Z	dS )r   Logs results to progress.csv under the trial directory.

    Automatically flattens nested dicts in the result dict before writing
    to csv:

        {"a": {"b": 1, "c": 2}} -> {"a/b": 1, "a/c": 2}

    c                 C   s
   d| _ d S )NF)_initializedself r   G/home/ubuntu/.local/lib/python3.10/site-packages/ray/tune/logger/csv.py_init"   s   
zCSVLogger._initc                 C   sJ   | j s#t| jt}| o| jdk| _|d| _	d| _
d| _ dS dS )z3CSV outputted with Headers as first set of results.r   aNT)r   r   logdirr   existsstatst_size_continuingopen_file_csv_out)r   progress_filer   r   r   _maybe_init%   s   
zCSVLogger._maybe_initresultc                    s       | }d|v r|d= t|dd} jd u r,t j|  _ js, j	   j
 fdd| D   j  d S )Nconfig/	delimiterc                    s"   i | ]\}}| j jv r||qS r   )r"   
fieldnames.0kvr   r   r   
<dictcomp><   s   " z'CSVLogger.on_result.<locals>.<dictcomp>)r$   copyr
   r"   csv
DictWriterr!   keysr   writeheaderwriterowitemsflush)r   r%   tmpr   r   r   	on_result0   s   

zCSVLogger.on_resultc                 C   s$   | j r| jjs| j  d S d S d S N)r   r!   closedr7   r   r   r   r   r7   @   s   zCSVLogger.flushc                 C   s   | j r
| j  d S d S r:   )r   r!   closer   r   r   r   r<   D   s   zCSVLogger.closeN)
__name__
__module____qualname____doc__r   r$   r   r9   r7   r<   r   r   r   r   r      s    	c                   @   sR   e Zd ZdZeg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S )CSVLoggerCallbackr   c                 C   s   i | _ i | _i | _d S r:   )_trial_continue_trial_files
_trial_csvr   r   r   r   __init__V   s   
zCSVLoggerCallback.__init__trialr   c                 C   sr   || j v r| j |   |  t|jt}| t| | o&| j	dk| j
|< |d| j |< d | j|< d S )Nr   at)rC   r<   init_local_pathr   
local_pathr   _restore_from_remoter   r   r   rB   r    rD   )r   rF   local_file_pathr   r   r   _setup_trial[   s   
zCSVLoggerCallback._setup_trial	iterationr%   c                    s    j vr
  | }|dd  t|dd} j s9t j  |  j<  j	 s9 j 
   j  fdd| D   j    d S )Nr&   r'   r(   c                    s&   i | ]\}}| j  jv r||qS r   )rD   r*   r+   r   rF   r   r   r/   }   s   & z6CSVLoggerCallback.log_trial_result.<locals>.<dictcomp>)rC   rL   r0   popr
   rD   r1   r2   r3   rB   r4   r5   r6   r7   )r   rM   rF   r%   r8   r   rN   r   log_trial_resultm   s   





z"CSVLoggerCallback.log_trial_resultFfailedc                 C   s0   || j vrd S | j|= | j |   | j |= d S r:   )rC   rD   r<   )r   rF   rQ   r   r   r   log_trial_end   s
   
zCSVLoggerCallback.log_trial_endN)rF   r   )F)r=   r>   r?   r@   r   _SAVED_FILE_TEMPLATESrE   rL   intr   rP   boolrR   r   r   r   r   rA   I   s    	
rA   )r1   loggingpathlibr   typingr   r   r   ray.air.constantsr   ray.tune.logger.loggerr   r   r	   ray.tune.utilsr
   ray.util.annotationsr   r   ray.tune.experiment.trialr   	getLoggerr=   loggerformatr   rA   r   r   r   r   <module>   s*    
1