o
    2hO*                     @   s>   d dl mZ d dl mZ d dlmZ edG dd dZdS )    )backend)utils)keras_exportzkeras.callbacks.Callbackc                   @   s4  e Zd ZdZdd Zdd Zdd Zedd	 Ze	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+ddZe	j
d+dd Ze	j
d+d!d"Ze	j
d+d#d$Ze	j
d+d%d&Ze	j
d+d'd(Ze	j
d+d)d*Zd
S ),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                 C   s   d | _ d | _d S N)params_model)self r
   W/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/callbacks/callback.py__init__C   s   
zCallback.__init__c                 C   
   || _ d S r   )r   )r	   r   r
   r
   r   
set_paramsG      
zCallback.set_paramsc                 C   r   r   )r   )r	   modelr
   r
   r   	set_modelJ   r   zCallback.set_modelc                 C   sT   t   dkrddlm} t| j|r| jjS t   dkr't| jdr'| j  | jS )Ntorchr   )DistributedDataParalleljaxjax_state_sync)r   torch.nn.parallelr   
isinstancer   modulehasattrr   )r	   r   r
   r
   r   r   M   s   
zCallback.modelNc                 C      dS )z;A backwards compatibility alias for `on_train_batch_begin`.Nr
   r	   batchlogsr
   r
   r   on_batch_beginf       zCallback.on_batch_beginc                 C   r   )z9A backwards compatibility alias for `on_train_batch_end`.Nr
   r   r
   r
   r   on_batch_endj   r   zCallback.on_batch_endc                 C   r   )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   r
   r
   r   on_epoch_beginn   r   zCallback.on_epoch_beginc                 C   r   )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!   r
   r
   r   on_epoch_end{   r   zCallback.on_epoch_endc                 C      | j ||d dS )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   r
   r
   r   on_train_batch_begin   s   zCallback.on_train_batch_beginc                 C   r%   )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   r
   r
   r   on_train_batch_end   s   zCallback.on_train_batch_endc                 C   r   )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   r
   r
   r   on_test_batch_begin   r   zCallback.on_test_batch_beginc                 C   r   )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   r
   r
   r   on_test_batch_end   r   zCallback.on_test_batch_endc                 C   r   )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   r
   r
   r   on_predict_batch_begin   r   zCallback.on_predict_batch_beginc                 C   r   )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   r
   r
   r   on_predict_batch_end   r   zCallback.on_predict_batch_endc                 C   r   )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   r
   r
   r   on_train_begin   r   zCallback.on_train_beginc                 C   r   )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-   r
   r
   r   on_train_end   r   zCallback.on_train_endc                 C   r   )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-   r
   r
   r   on_test_begin	  r   zCallback.on_test_beginc                 C   r   )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-   r
   r
   r   on_test_end  r   zCallback.on_test_endc                 C   r   )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-   r
   r
   r   on_predict_begin   r   zCallback.on_predict_beginc                 C   r   )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-   r
   r
   r   on_predict_end+  r   zCallback.on_predict_endr   )__name__
__module____qualname____doc__r   r   r   propertyr   r   defaultr   r    r#   r$   r'   r(   r)   r*   r+   r,   r.   r/   r0   r1   r2   r3   r
   r
   r
   r   r      sN    ;



r   N)	keras.srcr   r   keras.src.api_exportr   r   r
   r
   r
   r   <module>   s
    