
    2VhO*                     R    d dl mZ d dl mZ d dlmZ  ed       G d d             Zy)    )backend)utils)keras_exportzkeras.callbacks.Callbackc                      e Zd ZdZd Zd Zd Zed        Ze	j                  dd       Ze	j                  dd       Ze	j                  dd	       Ze	j                  dd
       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Ze	j                  dd       Zy)Callbacka/  Base class used to build new callbacks.

    Callbacks can be passed to keras methods such as `fit()`, `evaluate()`, and
    `predict()` in order to hook into the various stages of the model training,
    evaluation, and inference lifecycle.

    To create a custom callback, subclass `keras.callbacks.Callback` and
    override the method associated with the stage of interest.

    Example:

    >>> training_finished = False
    >>> class MyCallback(Callback):
    ...   def on_train_end(self, logs=None):
    ...     global training_finished
    ...     training_finished = True
    >>> model = Sequential([
    ...     layers.Dense(1, input_shape=(1,))])
    >>> model.compile(loss='mean_squared_error')
    >>> model.fit(np.array([[1.0]]), np.array([[1.0]]),
    ...           callbacks=[MyCallback()])
    >>> assert training_finished == True

    If you want to use `Callback` objects in a custom training loop:

    1. You should pack all your callbacks into a single `callbacks.CallbackList`
       so they can all be called together.
    2. You will need to manually call all the `on_*` methods at the appropriate
       locations in your loop. Like this:

    Example:

    ```python
    callbacks =  keras.callbacks.CallbackList([...])
    callbacks.append(...)
    callbacks.on_train_begin(...)
    for epoch in range(EPOCHS):
        callbacks.on_epoch_begin(epoch)
        for i, data in dataset.enumerate():
        callbacks.on_train_batch_begin(i)
        batch_logs = model.train_step(data)
        callbacks.on_train_batch_end(i, batch_logs)
        epoch_logs = ...
        callbacks.on_epoch_end(epoch, epoch_logs)
    final_logs=...
    callbacks.on_train_end(final_logs)
    ```

    Attributes:
        params: Dict. Training parameters
            (eg. verbosity, batch size, number of epochs...).
        model: Instance of `Model`.
            Reference of the model being trained.

    The `logs` dictionary that callback methods
    take as argument will contain keys for quantities relevant to
    the current batch or epoch (see method-specific docstrings).
    c                      d | _         d | _        y N)params_model)selfs    L/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/callbacks/callback.py__init__zCallback.__init__C   s        c                     || _         y r	   )r
   )r   r
   s     r   
set_paramszCallback.set_paramsG   s	    r   c                     || _         y r	   )r   )r   models     r   	set_modelzCallback.set_modelJ   s	    r   c                 :   t        j                          dk(  r2ddlm} t        | j                  |      r| j                  j
                  S t        j                          dk(  r0t        | j                  d      r| j                  j                          | j                  S )Ntorchr   )DistributedDataParalleljaxjax_state_sync)r   torch.nn.parallelr   
isinstancer   modulehasattrr   )r   r   s     r   r   zCallback.modelM   sq    ??'A$++'>? {{)))??%'KK)+
 KK&&({{r   Nc                      y)z;A backwards compatibility alias for `on_train_batch_begin`.N r   batchlogss      r   on_batch_beginzCallback.on_batch_beginf       r   c                      y)z9A backwards compatibility alias for `on_train_batch_end`.Nr   r    s      r   on_batch_endzCallback.on_batch_endj   r$   r   c                      y)ae  Called at the start of an epoch.

        Subclasses should override for any actions to run. This function should
        only be called during TRAIN mode.

        Args:
            epoch: Integer, index of epoch.
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        Nr   r   epochr"   s      r   on_epoch_beginzCallback.on_epoch_beginn   r$   r   c                      y)a0  Called at the end of an epoch.

        Subclasses should override for any actions to run. This function should
        only be called during TRAIN mode.

        Args:
            epoch: Integer, index of epoch.
            logs: Dict, metric results for this training epoch, and for the
              validation epoch if validation is performed. Validation result
              keys are prefixed with `val_`. For training epoch, the values of
              the `Model`'s metrics are returned. Example:
              `{'loss': 0.2, 'accuracy': 0.7}`.
        Nr   r(   s      r   on_epoch_endzCallback.on_epoch_end{   r$   r   c                 *    | j                  ||       y)a  Called at the beginning of a training batch in `fit` methods.

        Subclasses should override for any actions to run.

        Note that if the `steps_per_execution` argument to `compile` in
        `Model` is set to `N`, this method will only be called every
        `N` batches.

        Args:
            batch: Integer, index of batch within the current epoch.
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        r"   N)r#   r    s      r   on_train_batch_beginzCallback.on_train_batch_begin   s      	E-r   c                 *    | j                  ||       y)a  Called at the end of a training batch in `fit` methods.

        Subclasses should override for any actions to run.

        Note that if the `steps_per_execution` argument to `compile` in
        `Model` is set to `N`, this method will only be called every
        `N` batches.

        Args:
            batch: Integer, index of batch within the current epoch.
            logs: Dict. Aggregated metric results up until this batch.
        r.   N)r&   r    s      r   on_train_batch_endzCallback.on_train_batch_end   s     	%d+r   c                      y)au  Called at the beginning of a batch in `evaluate` methods.

        Also called at the beginning of a validation batch in the `fit`
        methods, if validation data is provided.

        Subclasses should override for any actions to run.

        Note that if the `steps_per_execution` argument to `compile` in
        `Model` is set to `N`, this method will only be called every
        `N` batches.

        Args:
            batch: Integer, index of batch within the current epoch.
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        Nr   r    s      r   on_test_batch_beginzCallback.on_test_batch_begin   r$   r   c                      y)a*  Called at the end of a batch in `evaluate` methods.

        Also called at the end of a validation batch in the `fit`
        methods, if validation data is provided.

        Subclasses should override for any actions to run.

        Note that if the `steps_per_execution` argument to `compile` in
        `Model` is set to `N`, this method will only be called every
        `N` batches.

        Args:
            batch: Integer, index of batch within the current epoch.
            logs: Dict. Aggregated metric results up until this batch.
        Nr   r    s      r   on_test_batch_endzCallback.on_test_batch_end   r$   r   c                      y)a  Called at the beginning of a batch in `predict` methods.

        Subclasses should override for any actions to run.

        Note that if the `steps_per_execution` argument to `compile` in
        `Model` is set to `N`, this method will only be called every
        `N` batches.

        Args:
            batch: Integer, index of batch within the current epoch.
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        Nr   r    s      r   on_predict_batch_beginzCallback.on_predict_batch_begin   r$   r   c                      y)a  Called at the end of a batch in `predict` methods.

        Subclasses should override for any actions to run.

        Note that if the `steps_per_execution` argument to `compile` in
        `Model` is set to `N`, this method will only be called every
        `N` batches.

        Args:
            batch: Integer, index of batch within the current epoch.
            logs: Dict. Aggregated metric results up until this batch.
        Nr   r    s      r   on_predict_batch_endzCallback.on_predict_batch_end   r$   r   c                      y)zCalled at the beginning of training.

        Subclasses should override for any actions to run.

        Args:
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        Nr   r   r"   s     r   on_train_beginzCallback.on_train_begin   r$   r   c                      y)a.  Called at the end of training.

        Subclasses should override for any actions to run.

        Args:
            logs: Dict. Currently the output of the last call to
              `on_epoch_end()` is passed to this argument for this method but
              that may change in the future.
        Nr   r;   s     r   on_train_endzCallback.on_train_end   r$   r   c                      y)a  Called at the beginning of evaluation or validation.

        Subclasses should override for any actions to run.

        Args:
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        Nr   r;   s     r   on_test_beginzCallback.on_test_begin	  r$   r   c                      y)aC  Called at the end of evaluation or validation.

        Subclasses should override for any actions to run.

        Args:
            logs: Dict. Currently the output of the last call to
              `on_test_batch_end()` is passed to this argument for this method
              but that may change in the future.
        Nr   r;   s     r   on_test_endzCallback.on_test_end  r$   r   c                      y)a   Called at the beginning of prediction.

        Subclasses should override for any actions to run.

        Args:
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        Nr   r;   s     r   on_predict_beginzCallback.on_predict_begin   r$   r   c                      y)zCalled at the end of prediction.

        Subclasses should override for any actions to run.

        Args:
            logs: Dict. Currently no data is passed to this argument for this
              method but that may change in the future.
        Nr   r;   s     r   on_predict_endzCallback.on_predict_end+  r$   r   r	   )__name__
__module____qualname____doc__r   r   r   propertyr   r   defaultr#   r&   r*   r,   r/   r1   r3   r5   r7   r9   r<   r>   r@   rB   rD   rF   r   r   r   r   r      s   9v  0 ]]J J ]]H H ]]
 
 ]]  ]]. ." ]], ,  ]] $ ]] " ]]  ]]  ]]  ]]	 	 ]]  ]]	 	 ]]  ]] r   r   N)	keras.srcr   r   keras.src.api_exportr   r   r   r   r   <module>rO      s0      - ()m m *mr   