o
    XεiP#                     @   s"   d dl mZmZ G dd dZdS )    )CallableDictc                   @   s   e Zd ZdddZdeeef ddfddZddd	Zdd
dZ	dddZ
dddZdddZdddZedddZedddZdddZdddZdddZdS )TrainerCallbackreturnNc                 C   s:   g | _ g | _g | _g | _g | _g | _g | _g | _g | _d S )N)	callbacks_on_init_startcallbacks_on_init_endcallbacks_on_epoch_startcallbacks_on_epoch_endcallbacks_on_train_epoch_startcallbacks_on_train_epoch_endcallbacks_on_train_step_startcallbacks_on_train_step_endcallbacks_on_keyboard_interrupt)self r   E/home/ubuntu/.local/lib/python3.10/site-packages/trainer/callbacks.py__init__   s   
zTrainerCallback.__init__callbacks_dictc                 C   s   |  D ]m\}}|dkr| j| q|dkr| j| q|dkr)| j| q|dkr4| j| q|dkr?| j| q|dkrJ| j| q|dkrU| j| q|dkr`| j	| q|d	krk| j
| qtd
| d S )Non_init_starton_init_endon_epoch_starton_epoch_endon_train_epoch_starton_train_epoch_endon_train_step_starton_train_step_endon_keyboard_interruptzInvalid callback key: )itemsr   appendr   r   r	   r
   r   r   r   r   
ValueError)r   r   keyvaluer   r   r   parse_callbacks_dict   s*   z$TrainerCallback.parse_callbacks_dictc                 C      t |jdrt |jjdr|jj| nt |jdr!|j| t |jdr-|j| t |jdr9|j| | jrF| jD ]}|| q?d S d S )Nmoduler   )hasattrmodelr$   r   	criterion	optimizerr   r   trainercallbackr   r   r   r   '      

zTrainerCallback.on_init_startc                 C   s   t |jdrt |jjdr|jj| nt |jdr!|j| t |jdr-|j| t |jdr9|j| t| jdkrJ| jD ]}|| qCd S d S )Nr$   r   r   )r%   r&   r$   r   r'   r(   lenr   r)   r   r   r   r   9   s   

zTrainerCallback.on_init_endc                 C   r#   )Nr$   r   )r%   r&   r$   r   r'   r(   r   r)   r   r   r   r   K   r,   zTrainerCallback.on_epoch_startc                 C   r#   )Nr$   r   )r%   r&   r$   r   r'   r(   r	   r)   r   r   r   r   ]   r,   zTrainerCallback.on_epoch_endc                 C   r#   )Nr$   r   )r%   r&   r$   r   r'   r(   r
   r)   r   r   r   r   o   r,   z$TrainerCallback.on_train_epoch_startc                 C   r#   )Nr$   r   )r%   r&   r$   r   r'   r(   r   r)   r   r   r   r      r,   z"TrainerCallback.on_train_epoch_endc                 C   sX   t | jdrt | jjdr| jj|| j d S d S t | jdr*| j|| j d S d S )Nr$   before_backward_pass)r%   r&   r$   r.   r(   )r*   	loss_dictr   r   r   r.      s   z$TrainerCallback.before_backward_passc                 C   sL   t | jdrt | jjdr| jj  d S d S t | jdr$| j  d S d S )Nr$   before_gradient_clipping)r%   r&   r$   r0   )r*   r   r   r   r0      s   z(TrainerCallback.before_gradient_clippingc                 C   r#   )Nr$   r   )r%   r&   r$   r   r'   r(   r   r)   r   r   r   r      r,   z#TrainerCallback.on_train_step_startc                 C   r#   )Nr$   r   )r%   r&   r$   r   r'   r(   r   r)   r   r   r   r      r,   z!TrainerCallback.on_train_step_endc                 C   r#   )Nr$   r   )r%   r&   r$   r   r'   r(   r   r)   r   r   r   r      r,   z%TrainerCallback.on_keyboard_interrupt)r   N)__name__
__module____qualname__r   r   strr   r"   r   r   r   r   r   r   staticmethodr.   r0   r   r   r   r   r   r   r   r      s     








r   N)typingr   r   r   r   r   r   r   <module>   s    