
    9i5                         S SK r S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJrJrJrJrJrJrJrJr  S SKJr  S S	KJr  \	R2                  " \R4                  S
9 " S S\5      5       rg)    N)Mapping)distributed)Trainers)TRAINERS)EpochBasedTrainer)DEFAULT_MODEL_REVISIONConfigFields
ConfigKeysHubsModeKeys	ModelFileTasksTrainerStages)	to_device)func_receive_dict_inputs)module_namec                   R   ^  \ rS rSrU 4S jrU 4S jrU 4S jrS rS rS r	Sr
U =r$ )	ImageInpaintingTrainer   c                 &   > [         TU ]  " U0 UD6  g N)super__init__selfargskwargs	__class__s      o/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/trainers/cv/image_inpainting_trainer.pyr   ImageInpaintingTrainer.__init__   s    $)&)    c                 &   > [         TU ]  " U0 UD6  g r   )r   trainr   s      r   r#   ImageInpaintingTrainer.train   s    t&v&r!   c                 (   > [         TU ]  " U0 UD6nU$ r   )r   evaluate)r   r   r   metric_valuesr   s       r   r&   ImageInpaintingTrainer.evaluate   s    ($9&9r!   c                     g r    )r   modelinputss      r   prediction_step&ImageInpaintingTrainer.prediction_step   s    r!   c                 ~   U R                  [        R                  5        SU l        U R                  R                  5         [        U R                  U R                  5       GH9  nU R                  [        R                  5        [        U5       H  u  p4[        X@R                  5      nX@l        X0l        [        S5       H]  nU R                  [        R                  5        U R                  U R                  XE5        U R                  [        R                   5        M_     U ?U =R"                  S-  sl        [$        R&                  U l        US-   U R*                  :  d  M    O   U R                  [        R,                  5        U =R                  S-  sl        GM<     U R                  [        R.                  5        g)z:Training loop used by `EpochBasedTrainer.train()`
        r         N)invoke_hookr   
before_run_epochr+   r#   range_max_epochsbefore_train_epoch	enumerater   device
data_batch_inner_iterbefore_train_iter
train_stepafter_train_iter_iterr   TRAIN_modeiters_per_epochafter_train_epoch	after_run)r   data_loader_ir:   idxs         r   
train_loop!ImageInpaintingTrainer.train_loop!   s@    	112

t{{D$4$45A]==>!*;!7&z;;?
",#$  8C$$]%D%DEOODJJ
@$$]%C%CD $ O

a
%^^
q5D000 "8 ]<<=KK1KK% 6( 	001r!   c                 $   UR                  5         [        R                  U l        [	        U[
        5      (       a;  [        UR                  5      (       d!  UR                  R                  " S0 UDSU0D6nOUR                  R                  X#S9n[	        U[        5      (       d  [        S5      eSU;  Ga2  S/n[        / 5      nU H:  nUR                  UR                  5        Vs/ s H  oU;   d  M
  UPM     sn5        M<     0 n	U H  nUR                  US5      n
U
c  M  [         R"                  " 5       (       al  [         R$                  " 5       (       aR  U
R&                  R)                  5       n
[         R*                  " U
R-                  [         R.                  " 5       5      5        U	R                  XR1                  5       05        M     U R2                  R                  U	5        OU R2                  R                  US   5        X@l        gs  snf )a	  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.
optimizer_idx)rL   z$"model.forward()" must return a dictlog_varslossNr*   )r#   r   r@   rA   
isinstancer   r   forwardr+   _do_stepdict	TypeErrorsetupdatekeysgetdistis_availableis_initializeddataclone
all_reducediv_get_world_sizeitem
log_buffertrain_outputs)r   r+   r,   rH   rb   default_keys_pattern
match_keyskey_pkeyrM   values              r   r=   !ImageInpaintingTrainer.train_step=   s   $ 	^^
f '?'N'N!KK00M6MMM!KK000KM-..BCC ]*$*8 RJ-!!$1$6$6$8I$8SSLS$8IK . H!%))#t4$((**t/B/B/D/D %

 0 0 2

43F3F3H(IJOOS**,$78 " OO""8,OO""=#<=* Js   &	H
3H
)r4   r;   rA   r:   rb   )__name__
__module____qualname____firstlineno__r   r#   r&   r-   rI   r=   __static_attributes____classcell__)r   s   @r   r   r      s&    *'282+ 2+r!   r   )timecollections.abcr   torchr   rX   modelscope.metainfor   modelscope.trainers.builderr   modelscope.trainers.trainerr   modelscope.utils.constantr   r	   r
   r   r   r   r   r   modelscope.utils.data_utilsr   modelscope.utils.file_utilsr   register_moduleimage_inpaintingr   r*   r!   r   <module>rz      s_     # % ( 0 9= = = 2 @ 
h&?&?@]+. ]+ A]+r!   