
    &`i'                     ~   d dl Z d dlZ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m	Z	m
Z
 d dlZd dlZd dlmZm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  e j        e          Z ej         dd          Z!dZ"eez   Z#dZ$ ej%        d          \  Z&Z'ej(        ej)        ej*        ej+        ej,        ej-        dZ.d Z/d Z0	 	 	 	 	 	 d#de1de
e	e1                  de
e1         de
e1         de
e	e1                  de2de3fdZ4	 	 	 	 	 	 d#de1de
e	e1                  de1de1de
e	e1                  de2de3fdZ5d$d e1d!e1fd"Z6dS )%    N)datetime)Path)ListOptional)is_numeric_dtypeis_string_dtype)tabulateEXPR_RESULT_FILE)	TuneError)ExperimentAnalysis)CONFIG_PREFIXDEFAULT_EXPERIMENT_INFO_KEYSDEFAULT_RESULT_KEYSEDITORvimz%Y-%m-%d %H:%M:%S (%A))nametotal_trialslast_updated)d   r   )fallback)<z<=z==z!=z>=>c                  2    t           t          d          dS )z%Checks whether tabulate is installed.Nz:Tabulate not installed. Please run `pip install tabulate`.)r	   ImportError     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/tune/cli/commands.py_check_tabulater   2   s    VWWW r   c                    t          j                    }g }g }t          |           D ]\  }}| |                                                                         r||gz  }8| |         ||<   t          |dd          }t          |                              d          t          k    r9|	                    |dd           |t          | j                  |d         z  } nt          |ddd	
          }t          |           |r=t          j        d                    |          d           t          j        d           |r)t          j        d                    |          d           |||fS )zPrints output of given dataframe to fit into terminal.

    Returns:
        table: Final outputted dataframe.
        dropped_cols: Columns dropped due to terminal size.
        empty_cols: Empty columns (dropped on default).
    keyspsql)headerstablefmt
   T)axisinplaceNnever)r#   r$   	showindexzDropped columns: {}yellowfgz=Please increase your terminal size to view remaining columns.zEmpty columns: {})pd	DataFrame	enumerateisnullallr	   strindex
TERM_WIDTHdroplistcolumnsprintclicksechoformat)	dataframeprint_dfdropped_cols
empty_colsicol
test_tabletables           r   print_format_outputrE   8   s    |~~HLJI&&  3S>  ""&&(( 	3%J!#hHHH
z??  &&33MM#AtM444D!233ABB77LE	 4 Xv'RRRE	%LLL U)00>>8LLLLSTTT I'..z::xHHHH,
**r   Fexperiment_pathsortoutput	filter_op	info_keyslimitdescc           	         t                       	 t          |                                           }n'# t          $ r}t	          j        d          |d}~ww xY wt          dz   fdfd|j        D             }	rND ]8}
|
|j        vr-t	          j        d                    |
|j                            9fd|j        D             }	|	st	          j        d          ||	         }d	|v rbt          j
        d
d          5  |d	                                         }ddd           n# 1 swxY w Y   |                    d           }||d	<   d|v r$|d         j                            | d          |d<   |r|                    d          \  }}}||         j        }t#          |          rt%          |          }nGt'          |          rt          |          }n(t	          j        d                    ||                    t(          |         } |||         |          }||         }|rX|D ];}||vr5t	          j        d                    |t+          |                              <| }|                    ||          }|r
|d|         }t/          |           |rt0          j                            |          d                                         }|dv r|                    |           nE|dk    r|                    |d           n't	          j        d                    |                    t	          j        d                    |          d           dS dS )a	  Lists trials in the directory subtree starting at the given path.

    Args:
        experiment_path: Directory where trials are located.
            Like Experiment.local_dir/Experiment.name/experiment*.json.
        sort: Keys to sort by.
        output: Name of file where output is saved.
        filter_op: Filter operation in the format
            "<column> <operator> <value>".
        info_keys: Keys that are displayed.
        limit: Number of rows to display.
        desc: Sort ascending vs. descending.
    zNo trial data found!N/c                 @    | t           v p|                               S N)DEFAULT_CLI_KEYS
startswith)kconfig_prefixs    r   
key_filterzlist_trials.<locals>.key_filter}   s     $$C](C(CCr   c                 *    g | ]} |          |S r   r   ).0rS   rU   s     r   
<listcomp>zlist_trials.<locals>.<listcomp>   s&    CCCaZZ]]CCCCr   z-Provided key invalid: {}. Available keys: {}.c                     g | ]}|v |	S r   r   )rW   rS   rJ   s     r   rX   zlist_trials.<locals>.<listcomp>   s    HHH!iAr   zNo columns to output.last_update_timezmode.use_inf_as_nullTc                 Z    t          j        |                               t                    S rP   )r   fromtimestampstrftimeTIMESTAMP_FORMAT)ts    r   <lambda>zlist_trials.<locals>.<lambda>   s     h,Q//889IJJ r   logdir  Unsupported dtype for {}: {}{} not in: {}by	ascendingr&   z.pz.pklz.pickle.csvFr4   Unsupported filetype: {}Output saved at {}greenr,   )r   r   r=   r   r:   ClickExceptionr   r8   r<   r.   option_contextdropnaapplyr3   replacesplitdtyper   floatr   	OPERATORSr7   sort_valuesrE   ospathsplitextlower	to_pickleto_csvr;   )rF   rG   rH   rI   rJ   rK   rL   checkpoints_dfecol_keysrS   datetime_seriesrB   opvalcol_typefiltered_indexkeyrh   file_extensionrT   rU   s       `               @@r   list_trialsr   ^   so   , B+O<<FFHH B B B"#9::AB "C'MD D D D D DCCC>1CCCH I 	 	A...***0&N4J*K*K   /
 IHHH~5HHH <"#:;;;#H-N^++5t<< 	J 	J,-?@GGIIO	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J *//JJ
 
 .=)*>!!#1(#;#?#G#GR$
 $
x   8 s++R!#&,H%% 	**CCX&& 	c((CC &.55c8DD   r]N3/55'7 R 	 	C.((*#**3^0D0DEE   ) H	'33ty3QQ 0'/''' E))&11!4::<<666$$V,,,,v%%!!&!6666&'A'H'H'P'PQQQ(//77GDDDDDDE Es&   !5 
AAAD,,D03D0project_pathc           
         t                       t          t          j        |                     \  }}}	g }
|D ]e}t	          d t          j        t          j                            ||                    D                       }||d}|
                    |           f|
st          j	        d          t          j        |
          |st          }fdt          |          D             }|s't          j	        d                    |                    |         |r|                    d          \  }}}|         j        }t#          |          rt%          |          }nGt'          |          rt)          |          }n(t          j	        d                    ||                    t*          |         } ||         |          }|         |rX|D ];}|vr5t          j	        d                    |t                                        <| }                    ||	          |r
d
|         t/                     |rt          j                            |          d                                         }|dv r                    |           nE|dk    r                    |d           n't          j	        d                    |                    t          j        d                    |          d           d
S d
S )a  Lists experiments in the directory subtree.

    Args:
        project_path: Directory where experiments are located.
            Corresponds to Experiment.local_dir.
        sort: Keys to sort by.
        output: Name of file where output is saved.
        filter_op: Filter operation in the format
            "<column> <operator> <value>".
        info_keys: Keys that are displayed.
        limit: Number of rows to display.
        desc: Sort ascending vs. descending.
    c              3   0   K   | ]\  }}}t           |v V  d S rP   r
   )rW   _filess      r   	<genexpr>z#list_experiments.<locals>.<genexpr>   sA       
 
1e %
 
 
 
 
 
r   )r   r   zNo experiments found!c                     g | ]}|v |	S r   r   )rW   rS   info_dfs     r   rX   z$list_experiments.<locals>.<listcomp>   s    ;;;aa7lllllr   z#None of keys {} in experiment data!rc   rd   re   rf   Nr&   ri   rj   Frk   rl   rm   rn   r,   )r   nextry   walksumrz   joinappendr:   ro   r.   r/   DEFAULT_PROJECT_INFO_KEYSr7   r<   rt   ru   r   rv   r   r3   rw   rx   rE   r{   r|   r}   r~   r;   )r   rG   rH   rI   rJ   rK   rL   baseexperiment_foldersr   experiment_data_collectionexperiment_dir
num_trialsexperiment_datar   rB   r   r   r   r   r   rh   r   r   s                          @r   list_experimentsr      sX   , "&rw|'<'<"="=D
a!#, ; ; 
 
!wrw||D.'I'IJJ
 
 
 
 


 $2:NN"))/::::% <"#:;;;l566G .-	;;;;4	??;;;H 
"188CC
 
 	
 hG * s++R3<%H%% 	**CCX&& 	c((CC &.55c8DD   r]GCL#...) D 	W 	WC'!!*?+A+A#tG}}+U+UVVV "H	%%%CC "&5&/    E))&11!4::<<666f%%%%v%%NN6N////&'A'H'H'P'PQQQ(//77GDDDDDDE Er   note.txtrz   filenamec                 `   t          |                                           } |                                 sJ d                    |                       | |z  }	 t	          j        t          |                                g           nM# t          $ r@}t          j
        d                    t          |                    d           Y d}~nd}~ww xY w|                                r$t          d|                                           dS t          d|                                           dS )zOpens a txt file at the given path where user can add and save notes.

    Args:
        path: Directory where note will be saved.
        filename: Name of note. Defaults to "note.txt"
    z{} is not a valid directory.zEditing note failed: {}redr,   NzNote updated at:zNote created at:)r   
expanduseris_dirr<   
subprocesscallr   as_posix	Exceptionr:   r;   r3   existsr9   )rz   r   filepathexcs       r   add_noter     s,    ::  ""D;;==EE8??EEEE=hHJ!2!2!4!456666 J J J-44SXX>>5IIIIIIIIIJ 7 ("3"3"5"566666 ("3"3"5"566666s   -B 
C6CC)NNNNNF)r   )7loggingoperatorry   shutilr   r   pathlibr   typingr   r   r:   pandasr.   pandas.api.typesr   r   )ray._private.thirdparty.tabulate.tabulater	   ray.air.constantsr   ray.tuner   ray.tune.analysisr   ray.tune.resultr   r   r   	getLogger__name__loggergetenvr   r^   rQ   r   get_terminal_sizer5   TERM_HEIGHTltleeqnegegtrw   r   rE   r3   intboolr   r   r   r   r   r   <module>r      s0     				                  ! ! ! ! ! ! ! !      > > > > > > > > > > > > > > . . . . . .       0 0 0 0 0 0          
	8	$	$	8U	#	#+ /2EE   3&2JGGG 
K 

+
+
+
+	 	X X X#+ #+ #+P !% #%)fE fEfE
49
fE SMfE }	fE
 S	"fE fE fE fE fE fEV !%%)UE UEUE
49
UE UE 	UE
 S	"UE UE UE UE UE UEp7 73 7# 7 7 7 7 7 7r   