o
    ॵiQ                     @   sp   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 ZejejdG dd	 d	eZd
S )    )Trainers)EpochBasedTrainer)TRAINERS)TrainerStages)	to_device)
get_logger)module_namec                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )
ANSTrainerzs
    A trainer is used for acoustic noise suppression.
    Override train_loop() to use dataset just one time.
    c                    s   t  j|i | d S N)super__init__)selfargskwargs	__class__ Y/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/trainers/audio/ans_trainer.pyr      s   zANSTrainer.__init__c                 C   s   |  tj d| _i }| j  t|}t| j| jD ]W}|  tj	 d| _
|D ]<\}}t|| j}|| _|  j
d7  _
|  tj | j| j|fi | |  tj | `|  jd7  _| j
| jkrd nq(|  tj |  jd7  _q|  tj dS )zE
        Update epoch by step number, based on super method.
        r      N)invoke_hookr   
before_run_epochmodeltrain	enumeraterange_max_epochsbefore_train_epoch_inner_iterr   device
data_batchbefore_train_iter
train_stepafter_train_iter_iteriters_per_epochafter_train_epoch	after_run)r   data_loaderr   
enumerated_ir    r   r   r   
train_loop   s.   
zANSTrainer.train_loopc                 C   s   d S r
   r   )r   r   inputsr   r   r   prediction_step3   s   zANSTrainer.prediction_step)__name__
__module____qualname____doc__r   r,   r.   __classcell__r   r   r   r   r	      s
    r	   N)modelscope.metainfor   modelscope.trainersr   modelscope.trainers.builderr   modelscope.utils.constantr   modelscope.utils.data_utilsr   modelscope.utils.loggerr   loggerregister_modulespeech_frcrn_ans_cirm_16kr	   r   r   r   r   <module>   s   