
    2Vh"                         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	 d dl
mZ d dlmZ d d	lmZ  ed
       G d de	             Zy)    N)backend)tree)utils)keras_export)Callback)History)ProgbarLogger)python_utilszkeras.callbacks.CallbackListc                        e Zd ZdZ	 	 	 	 ddZd Zd Zd Z fdZd Z	d Z
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dZ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dZddZddZd Z xZ S ) CallbackListz*Container abstracting a list of callbacks.c                    |rt        j                  |      ng | _        d| _        d| _        d| _        d| _        g | _        | j                  |       | j                  ||       | j                  |       | j                  |       y)a  Container for `Callback` instances.

        This object wraps a list of `Callback` instances, making it possible
        to call them all at once via a single endpoint
        (e.g. `callback_list.on_epoch_end(...)`).

        Args:
            callbacks: List of `Callback` instances.
            add_history: Whether a `History` callback should be added, if one
                does not already exist in the `callbacks` list.
            add_progbar: Whether a `ProgbarLogger` callback should be added, if
                one does not already exist in the `callbacks` list.
            model: The `Model` these callbacks are used with.
            **params: If provided, parameters will be passed to each `Callback`
                via `Callback.set_params`.
        NF)r   flatten	callbacks	_executor_async_train_async_test_async_predict_futures_configure_async_dispatch_add_default_callbacks	set_model
set_params)selfr   add_historyadd_progbarmodelparamss         Q/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/callbacks/callback_list.py__init__zCallbackList.__init__   st    0 5>i02! #&&y1##K=u    c                 \    || _         |r#| j                  D ]  }|j                  |        y y N)r   r   r   )r   r   callbacks      r   r   zCallbackList.set_params4   s2     NN ,##F+, r    c                    t         j                  sy d}d}d}|rt        |t        t        f      r|D ]  }t        |dd      rt        j                  |j                        sd}t        j                  |j                        sd}t        j                  |j                        sd}t        j                  |j                        rd} |s|s|r#t        j                  j                         | _        || _        || _        || _        y )NT
async_safeF)r   IS_THREAD_SAFE
isinstancelisttuplegetattrr   
is_defaulton_batch_endon_train_batch_endon_test_batch_endon_predict_batch_end
concurrentfuturesThreadPoolExecutorr   r   r   r   )r   r   async_train
async_testasync_predictcbks         r   r   z&CallbackList._configure_async_dispatch:   s    %%
)dE]3$ .CsL%8 ! ++C,<,<=&+ ++C,B,BC&+ ++C,A,AB%*
 ++C,D,DE(-. *'//BBDDN'%+r    c                    d| _         d| _        | j                  D ]2  }t        |t              r|| _         t        |t
              s,|| _        4 | j                  6|r4t               | _        | j                  j                  | j                         | j                   8|r5t	               | _         | j                  j                  | j                          yyy)z)Adds `Callback`s that are always present.N)_progbar_historyr   r'   r	   r   append)r   r   r   cbs       r   r   z#CallbackList._add_default_callbacksX   s    .. 	#B"m, "B( "		# == [#IDMNN!!$--0== [)ODMNN!!$--0 &1 r    c                     |sy t         |   |       | j                  r| j                  |_        | j                  D ]  }|j                  |        y r"   )superr   r9   historyr   )r   r   r#   	__class__s      r   r   zCallbackList.set_modelk   sI    % == MMEM 	&Hu%	&r    c                    | j                   D ]>  }|j                         s|j                          | j                   j                  |       @  | j                  j
                  |g| }| j                   j                  |       y r"   )r   doneresultremover   submitr:   )r   fnargsfutures       r   _async_dispatchzCallbackList._async_dispatcht   sh    mm 	-F{{}$$V,	- '&&r1D1V$r    c                 T    | j                   D ]  }|j                           g | _         y r"   )r   rB   )r   rG   s     r   _clear_futureszCallbackList._clear_futures|   s%    mm 	FMMO	r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y N)logs)r
   pythonify_logsr   on_batch_beginr   batchrM   r#   s       r   rO   zCallbackList.on_batch_begin   s8    **40 	6H##E#5	6r    c                 t    t        j                  |      }| j                  D ]  }|j                  ||        y r"   )r
   rN   r   on_epoch_beginr   epochrM   r#   s       r   rS   zCallbackList.on_epoch_begin   s5    **40 	1H##E40	1r    c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  ||        y r"   )r   rJ   r
   rN   r   on_epoch_endrT   s       r   rW   zCallbackList.on_epoch_end   sJ    !**40 	/H!!%.	/r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rL   )r
   rN   r   on_train_batch_beginrP   s       r   rY   z!CallbackList.on_train_batch_begin   8    **40 	<H))%d);	<r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rL   )r
   rN   r   on_test_batch_beginrP   s       r   r\   z CallbackList.on_test_batch_begin   s8    **40 	;H((T(:	;r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rL   )r
   rN   r   on_predict_batch_beginrP   s       r   r^   z#CallbackList.on_predict_batch_begin   s8    **40 	>H++E+=	>r    c                 |    | j                   r| j                  | j                  ||       y | j                  ||       y r"   )r   rH   _on_batch_endr   rQ   rM   s      r   r,   zCallbackList.on_batch_end   s3      !3!3UDAud+r    c                 |    | j                   r| j                  | j                  ||       y | j                  ||       y r"   )r   rH   _on_train_batch_endra   s      r   r-   zCallbackList.on_train_batch_end   s3      !9!95$G$$UD1r    c                 |    | j                   r| j                  | j                  ||       y | j                  ||       y r"   )r   rH   _on_test_batch_endra   s      r   r.   zCallbackList.on_test_batch_end   s3      !8!8%F##E40r    c                 |    | j                   r| j                  | j                  ||       y | j                  ||       y r"   )r   rH   _on_predict_batch_endra   s      r   r/   z!CallbackList.on_predict_batch_end   s3      !;!;UDI&&ud3r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rL   )r
   rN   r   r,   rP   s       r   r`   zCallbackList._on_batch_end   s8    **40 	4H!!%d!3	4r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rL   )r
   rN   r   r-   rP   s       r   rc   z CallbackList._on_train_batch_end   s8    **40 	:H''D'9	:r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rL   )r
   rN   r   r.   rP   s       r   re   zCallbackList._on_test_batch_end   s8    **40 	9H&&u4&8	9r    c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rL   )r
   rN   r   r/   rP   s       r   rg   z"CallbackList._on_predict_batch_end   rZ   r    c                 r    t        j                  |      }| j                  D ]  }|j                  |        y r"   )r
   rN   r   on_train_beginr   rM   r#   s      r   rm   zCallbackList.on_train_begin   s3    **40 	*H##D)	*r    c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  |        y r"   )r   rJ   r
   rN   r   on_train_endrn   s      r   rp   zCallbackList.on_train_end   sH    !**40 	(H!!$'	(r    c                 r    t        j                  |      }| j                  D ]  }|j                  |        y r"   )r
   rN   r   on_test_beginrn   s      r   rr   zCallbackList.on_test_begin   s3    **40 	)H""4(	)r    c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  |        y r"   )r   rJ   r
   rN   r   on_test_endrn   s      r   rt   zCallbackList.on_test_end   sH    !**40 	'H  &	'r    c                 r    t        j                  |      }| j                  D ]  }|j                  |        y r"   )r
   rN   r   on_predict_beginrn   s      r   rv   zCallbackList.on_predict_begin   s3    **40 	,H%%d+	,r    c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  |        y r"   )r   rJ   r
   rN   r   on_predict_endrn   s      r   rx   zCallbackList.on_predict_end   sH    !**40 	*H##D)	*r    c                 V    | j                   | j                   j                  d       y y )NT)cancel_futures)r   shutdown)r   s    r   __del__zCallbackList.__del__   s&    >>%NN##4#8 &r    )NFFNr"   )!__name__
__module____qualname____doc__r   r   r   r   r   rH   rJ   rO   rS   rW   rY   r\   r^   r,   r-   r.   r/   r`   rc   re   rg   rm   rp   rr   rt   rv   rx   r|   __classcell__)r?   s   @r   r   r      s    4 ! F,,<1&&%
6
1
/<
;
>
,2144
:
9
<
*
()
',
*9r    r   )concurrent.futuresr0   	keras.srcr   r   r   keras.src.api_exportr   keras.src.callbacks.callbackr   keras.src.callbacks.historyr   "keras.src.callbacks.progbar_loggerr	   keras.src.utilsr
   r    r    r   <module>r      sD        - 1 / < ( ,-i98 i9 .i9r    