
    2Vh                     l    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	  ed       G d de             Z
y)    N)keras_export)Callback)
file_utilszkeras.callbacks.CSVLoggerc                   <     e Zd ZdZd fd	ZddZddZddZ xZS )	CSVLoggeraC  Callback that streams epoch results to a CSV file.

    Supports all values that can be represented as a string,
    including 1D iterables such as `np.ndarray`.

    Args:
        filename: Filename of the CSV file, e.g. `'run/log.csv'`.
        separator: String used to separate elements in the CSV file.
        append: Boolean. True: append if file exists (useful for continuing
            training). False: overwrite existing file.

    Example:

    ```python
    csv_logger = CSVLogger('training.log')
    model.fit(X_train, Y_train, callbacks=[csv_logger])
    ```
    c                     t         |           || _        t        j                  |      | _        || _        d | _        d | _        d| _	        y )NT)
super__init__sepr   path_to_stringfilenameappendwriterkeysappend_header)selfr   	separatorr   	__class__s       N/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/callbacks/csv_logger.pyr
   zCSVLogger.__init__    sD    "11(;	!    c                 h   | j                   rst        j                  | j                        rQt        j                  | j                  d      5 }t        t        |j                                      | _        d d d        d}nd}t        j                  | j                  |      | _	        y # 1 sw Y   4xY w)Nraw)
r   r   existsr   Fileboollenreadliner   csv_file)r   logsfmodes       r   on_train_beginzCSVLogger.on_train_begin)   s    ;;  /__T]]C8 EA-1#ajjl2C-D)DD&EDD"t<E Es   )B((B1c                 $   	 xs i d 	 j                   ~t        j                                _         d} j                   D ]  }|j                  d      sd} n |s6 j                   j                   j                   D cg c]  }d|z   	 c}        j                  sx G  fddt
        j                        }dg j                   z   }t        j                   j                  ||       _         j                  r j                  j                          t        j                  d|i      }|j                  	fd	 j                   D                j                  j                  |        j                  j                          y c c}w )
Nc                    t        | t        j                        xr | j                  dk(  }t        | t              r| S t        | t
        j                  j                        r%|s#ddj                  t        t        |              dS | S )Nr   z"[z, z]")

isinstancenpndarrayndimstrcollectionsabcIterablejoinmap)kis_zero_dim_ndarrays     r   handle_valuez,CSVLogger.on_epoch_end.<locals>.handle_value6   sj    ",Q

";"K!!S!1koo667+DIIc#qk23266r   Fval_Tc                   (    e Zd ZW  j                  Zy)-CSVLogger.on_epoch_end.<locals>.CustomDialectN)__name__
__module____qualname__r   	delimiter)r   s   r   CustomDialectr6   P   s     HH	r   r;   epoch)
fieldnamesdialectc              3   R   K   | ]  }| j                  |d             f   yw)NAN)get).0keyr3   r!   s     r   	<genexpr>z)CSVLogger.on_epoch_end.<locals>.<genexpr>\   s+      
9<S,txxT234
s   $')r   sorted
startswithextendr   csvexcel
DictWriterr    r   writeheaderr,   OrderedDictupdatewriterowflush)
r   r<   r!   val_keys_foundrC   r1   r;   r=   row_dictr3   s
   ` `      @r   on_epoch_endzCSVLogger.on_epoch_end3   sB   zr
	 99tyy{+DI #Nyy >>&)%)N "		  dii!@&1*!@A{{%		 % "TYY.J..*mDK !!'')**GU+;< 
@D		
 	
 	X&) "As   Fc                 F    | j                   j                          d | _        y N)r    closer   )r   r!   s     r   on_train_endzCSVLogger.on_train_endb   s    r   ),FrT   )	r7   r8   r9   __doc__r
   r$   rR   rV   __classcell__)r   s   @r   r   r      s    &"=-^r   r   )r,   rH   numpyr(   keras.src.api_exportr   keras.src.callbacks.callbackr   keras.src.utilsr   r    r   r   <module>r_      s;     
  - 1 & )*X X +Xr   