o
    ॵik                     @   sB   d dl mZ d dlmZ d dlmZ ddlmZ G dd dZdS )	    )wraps)TrainerStages)is_method_overridden   )Priorityc                   @   s6  e Zd ZdZejejejejej	ej
ejejejejejejejfZej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ed$d% Zed&d' Zed(d) Zed*d+ Zed,d- Zed.d/ Z d0d1 Z!d2d3 Z"d4d5 Z#d6S )7Hookzo
    The Hook base class of any modelscope trainer. You can build your own hook inherited from this class.
    c                 C      dS )zN
        Will be called at the end of the trainer's `__init__` method
        N selftrainerr	   r	   R/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/trainers/hooks/hook.py
after_init   s   zHook.after_initc                 C   r   )z
        Will be called before trainer loop begins.
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr	   r
   r	   r	   r   
before_run      	zHook.before_runc                 C   r   )z
        Will be called after trainer loop end.
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr	   r
   r	   r	   r   	after_run*   r   zHook.after_runc                 C   r   )z
        Will be called before eval loop begins.
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr	   r
   r	   r	   r   
before_val5   r   zHook.before_valc                 C   r   )z
        Will be called after eval loop end.
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr	   r
   r	   r	   r   	after_val@   r   zHook.after_valc                 C   r   )z
        Will be called before every epoch begins.
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr	   r
   r	   r	   r   before_epochK   r   zHook.before_epochc                 C   r   )z
        Will be called after every epoch ends.
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr	   r
   r	   r	   r   after_epochV   r   zHook.after_epochc                 C   r   )z
        Will be called before every loop begins.
        Args:
            trainer: The trainer instance.

        Returns: None
        Nr	   r
   r	   r	   r   before_itera      zHook.before_iterc                 C   r   )z
        Will be called after every loop ends.
        Args:
            trainer: The trainer instance.

        Returns: None
        Nr	   r
   r	   r	   r   
after_iterk   r   zHook.after_iterc                 C      |  | dS )z
        Will be called before every train epoch begins. Default call ``self.before_epoch``
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr   r
   r	   r	   r   before_train_epochu      	zHook.before_train_epochc                 C   r   )z
        Will be called before every validation epoch begins. Default call ``self.before_epoch``
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr   r
   r	   r	   r   before_val_epoch   r   zHook.before_val_epochc                 C   r   )z
        Will be called after every train epoch ends. Default call ``self.after_epoch``
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr   r
   r	   r	   r   after_train_epoch   r   zHook.after_train_epochc                 C   r   )z
        Will be called after every validation epoch ends. Default call ``self.after_epoch``
        Args:
            trainer: The trainer instance.

        Returns: None

        Nr   r
   r	   r	   r   after_val_epoch   r   zHook.after_val_epochc                 C   r   )z
        Will be called before every train loop begins. Default call ``self.before_iter``
        Args:
            trainer: The trainer instance.

        Returns: None
        Nr   r
   r	   r	   r   before_train_iter      zHook.before_train_iterc                 C   r   )z
        Will be called before every validation loop begins. Default call ``self.before_iter``
        Args:
            trainer: The trainer instance.

        Returns: None
        Nr!   r
   r	   r	   r   before_val_iter   r#   zHook.before_val_iterc                 C   r   )z
        Will be called after every train loop ends. Default call ``self.after_iter``
        Args:
            trainer: The trainer instance.

        Returns: None
        Nr   r
   r	   r	   r   after_train_iter   r#   zHook.after_train_iterc                 C   r   )z
        Will be called after every validation loop ends. Default call ``self.after_iter``
        Args:
            trainer: The trainer instance.

        Returns: None
        Nr%   r
   r	   r	   r   after_val_iter   r#   zHook.after_val_iterc                 C      |dkr| j d | dkS dS )zK
        Whether to reach every ``n`` epochs
        Returns: bool
        r   r   F)epochr   nr	   r	   r   every_n_epochs      zHook.every_n_epochsc                 C   r(   )z^
        Whether to reach every ``n`` iterations at every epoch
        Returns: bool
        r   r   F)
inner_iter)runnerr+   r	   r	   r   every_n_inner_iters   r-   zHook.every_n_inner_itersc                 C   r(   )zO
        Whether to reach every ``n`` iterations
        Returns: bool
        r   r   F)iterr*   r	   r	   r   every_n_iters   r-   zHook.every_n_itersc                 C      | j d | jkS )zO
        Whether to reach the end of every epoch
        Returns: bool
        r   )r.   iters_per_epochr   r	   r	   r   end_of_epoch      zHook.end_of_epochc                 C   r3   )zG
        Whether to reach the last epoch
        Returns: bool
        r   )r)   
max_epochsr5   r	   r	   r   is_last_epoch   r7   zHook.is_last_epochc                 C   r3   )zj
        Whether to reach the last iteration in the entire training process
        Returns: bool
        r   )r1   	max_itersr5   r	   r	   r   is_last_iter   r7   zHook.is_last_iterc                    s<   t   tjD ]}t|t| r | q fddtjD S )Nc                    s   g | ]}| v r|qS r	   r	   ).0stagetrigger_stagesr	   r   
<listcomp>   s    z-Hook.get_triggered_stages.<locals>.<listcomp>)setr   stagesr   add)r   r=   r	   r>   r   get_triggered_stages   s   

zHook.get_triggered_stagesc                 C   s   i S Nr	   )r   r	   r	   r   
state_dict     zHook.state_dictc                 C   s   d S rE   r	   )r   rF   r	   r	   r   load_state_dict  rG   zHook.load_state_dictN)$__name__
__module____qualname____doc__r   r   r   r   r   r"   r&   r   r   r$   r'   r    r   r   rB   r   NORMALPRIORITYr   r   r   r   staticmethodr,   r0   r2   r6   r9   r;   rD   rF   rH   r	   r	   r	   r   r   
   sV    











r   N)		functoolsr   modelscope.utils.constantr   modelscope.utils.import_utilsr   priorityr   r   r	   r	   r	   r   <module>   s
   