
    ijz&                         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	 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  xZ!S )!CallbackListz*Container abstracting a list of callbacks.c                    |rt        j                  |      ng | _        d| _        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`.
        r   NF)r   flatten	callbacks_in_begin_end_block_count	_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         v/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/callbacks/callback_list.py__init__zCallbackList.__init__   s|    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_params5   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} || _        || _        || _        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_endr   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(-. (%+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_callbacksV   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   r7   historyr   )r   r   r$   	__class__s      r   r   zCallbackList.set_modeli   sI    % == MMEM 	&Hu%	&r!   c                     | xj                   dz  c_         | j                   dk(  rV| j                  s| j                  s| j                  r1| j                  $t
        j                  j                         | _        yyyy)zhCalled by `on_train/test/predict_begin`.

        Start the executor for async calls if needed.
           N)r   r   r   r   r   
concurrentfuturesThreadPoolExecutorr   s    r   	_on_beginzCallbackList._on_beginr   sl    
 	&&!+&**a/""d&6&6$:M:M&'//BBDDN ' ;N 0r!   c                     | xj                   dz  c_         | j                   dk  rt        d      | j                   dk(  r/| j                  "| j                  j                          d| _        yyy)zCalled by `on_train/test/predict_end`.

        Shutdown the executor for async calls if all begin/end blocks completed.
        r?   r   z8`on_xxx_end` called without corresponding `on_xxx_begin`N)r   
ValueErrorr   shutdownrC   s    r   _on_endzCallbackList._on_end   sl    
 	&&!+&))A-J  ))Q.4>>3MNN##%!DN 4N.r!   c                    | j                   D ]>  }|j                         s|j                          | j                   j                  |       @  | j                  j
                  |g| }| j                   j                  |       y r#   )r   doneresultremover   submitr8   )r   fnargsfutures       r   _async_dispatchzCallbackList._async_dispatch   sh    mm 	-F{{}$$V,	- '&&r1D1V$r!   c                 T    | j                   D ]  }|j                           g | _         y)z6Waits for all futures to complete and clears the list.N)r   rK   )r   rP   s     r   _flush_futureszCallbackList._flush_futures   s%    mm 	FMMO	r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y N)logs)r
   pythonify_logsr   on_batch_beginr   batchrV   r$   s       r   rX   zCallbackList.on_batch_begin   s8    **40 	6H##E#5	6r!   c                 t    t        j                  |      }| j                  D ]  }|j                  ||        y r#   )r
   rW   r   on_epoch_beginr   epochrV   r$   s       r   r\   zCallbackList.on_epoch_begin   s5    **40 	1H##E40	1r!   c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  ||        y r#   )r   rS   r
   rW   r   on_epoch_endr]   s       r   r`   zCallbackList.on_epoch_end   sJ    !**40 	/H!!%.	/r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rU   )r
   rW   r   on_train_batch_beginrY   s       r   rb   z!CallbackList.on_train_batch_begin   8    **40 	<H))%d);	<r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rU   )r
   rW   r   on_test_batch_beginrY   s       r   re   z CallbackList.on_test_batch_begin   s8    **40 	;H((T(:	;r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rU   )r
   rW   r   on_predict_batch_beginrY   s       r   rg   z#CallbackList.on_predict_batch_begin   s8    **40 	>H++E+=	>r!   c                 |    | j                   r| j                  | j                  ||       y | j                  ||       y r#   )r   rQ   _on_batch_endr   rZ   rV   s      r   r-   zCallbackList.on_batch_end   s3      !3!3UDAud+r!   c                 |    | j                   r| j                  | j                  ||       y | j                  ||       y r#   )r   rQ   _on_train_batch_endrj   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   rQ   _on_test_batch_endrj   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   rQ   _on_predict_batch_endrj   s      r   r0   z!CallbackList.on_predict_batch_end   s3      !;!;UDI&&ud3r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rU   )r
   rW   r   r-   rY   s       r   ri   zCallbackList._on_batch_end   s8    **40 	4H!!%d!3	4r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rU   )r
   rW   r   r.   rY   s       r   rl   z CallbackList._on_train_batch_end   s8    **40 	:H''D'9	:r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rU   )r
   rW   r   r/   rY   s       r   rn   zCallbackList._on_test_batch_end   s8    **40 	9H&&u4&8	9r!   c                 v    t        j                  |      }| j                  D ]  }|j                  ||        y rU   )r
   rW   r   r0   rY   s       r   rp   z"CallbackList._on_predict_batch_end   rc   r!   c                     | j                          t        j                  |      }| j                  D ]  }|j	                  |        y r#   )rD   r
   rW   r   on_train_beginr   rV   r$   s      r   rv   zCallbackList.on_train_begin   s=    **40 	*H##D)	*r!   c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  |        | j                          y r#   )r   rS   r
   rW   r   on_train_endrH   rw   s      r   ry   zCallbackList.on_train_end   sS    !**40 	(H!!$'	( 	r!   c                     | j                          t        j                  |      }| j                  D ]  }|j	                  |        y r#   )rD   r
   rW   r   on_test_beginrw   s      r   r{   zCallbackList.on_test_begin   s=    **40 	)H""4(	)r!   c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  |        | j                          y r#   )r   rS   r
   rW   r   on_test_endrH   rw   s      r   r}   zCallbackList.on_test_end   sS    !**40 	'H  &	' 	r!   c                     | j                          t        j                  |      }| j                  D ]  }|j	                  |        y r#   )rD   r
   rW   r   on_predict_beginrw   s      r   r   zCallbackList.on_predict_begin
  s=    **40 	,H%%d+	,r!   c                     | j                   r| j                          t        j                  |      }| j                  D ]  }|j                  |        | j                          y r#   )r   rS   r
   rW   r   on_predict_endrH   rw   s      r   r   zCallbackList.on_predict_end  sS    !**40 	*H##D)	* 	r!   )NFFNr#   )"__name__
__module____qualname____doc__r    r   r   r   r   rD   rH   rQ   rS   rX   r\   r`   rb   re   rg   r-   r.   r/   r0   ri   rl   rn   rp   rv   ry   r{   r}   r   r   __classcell__)r=   s   @r   r   r      s    4 " H,,61&&E"%6
1
/<
;
>
,2144
:
9
<
*),r!   r   )concurrent.futuresr@   	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 / < ( ,-K8 K .Kr!   