o
    *jQ                     @   s   d dl Z d dlmZ d dl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mZmZmZmZmZmZmZ d dlmZ d d	lmZ e	jejd
G dd deZdS )    N)Mapping)distributed)Trainers)TRAINERS)EpochBasedTrainer)DEFAULT_MODEL_REVISIONConfigFields
ConfigKeysHubsModeKeys	ModelFileTasksTrainerStages)	to_device)func_receive_dict_inputs)module_namec                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	OCRRecognitionTrainerc                    s   t  j|i |}|S N)superevaluate)selfargskwargsZmetric_values	__class__ o/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/trainers/cv/ocr_recognition_trainer.pyr      s   zOCRRecognitionTrainer.evaluatec                 C   s   d S r   r   )r   modelinputsr   r   r   prediction_step   s   z%OCRRecognitionTrainer.prediction_stepc           	         s   |   tj| _||}t|tstdd|vrldg}tg }|D ] |	 fdd|
 D  q#i }|D ],}||d}|durdt r[t r[|j }t|t  |	|| i q8| j	| n| j	|d  || _dS )aZ   Perform a training step on a batch of inputs.

        Subclass and override to inject custom behavior.

        Args:
            model (`TorchModel`): The model to train.
            inputs (`Dict[str, Union[torch.Tensor, Any]]`):
                The inputs and targets of the model.

                The dictionary will be unpacked before being fed to the model. Most models expect the targets under the
                argument `labels`. Check your model's documentation for all accepted arguments.

        Return:
            `torch.Tensor`: The tensor with training loss on this batch.
        z$"model.forward()" must return a dictlog_varsZlossc                    s   g | ]} |v r|qS r   r   ).0keyZkey_pr   r   
<listcomp>;   s    z4OCRRecognitionTrainer.train_step.<locals>.<listcomp>N)trainr   ZTRAIN_modedo_step
isinstancedict	TypeErrorsetupdatekeysgetdistZis_availableZis_initializeddatacloneZ
all_reduceZdiv_Zget_world_sizeitemZ
log_buffertrain_outputs)	r   r   r   r3   Zdefault_keys_patternZ
match_keysr    r"   valuer   r#   r   
train_step   s0   



z OCRRecognitionTrainer.train_stepc                 C   s*   | j r| jjn| j}|  ||}|S )zsPerform a evaluation step on a batch of inputs.

        Subclass and override to inject custom behavior.

        )_distr   moduleevalr'   )r   r0   r   resultr   r   r   evaluation_stepK   s   
z%OCRRecognitionTrainer.evaluation_step)__name__
__module____qualname__r   r   r5   r:   __classcell__r   r   r   r   r      s
    /r   )timecollections.abcr   Ztorchr   r/   Zmodelscope.metainfor   Zmodelscope.trainers.builderr   Zmodelscope.trainers.trainerr   Zmodelscope.utils.constantr   r   r	   r
   r   r   r   r   Zmodelscope.utils.data_utilsr   Zmodelscope.utils.file_utilsr   Zregister_moduleZocr_recognitionr   r   r   r   r   <module>   s   (