
    9i                         S SK r S SKJrJr  SSKJr  SSKJrJrJ	r	  SSK
JrJr  SSKJr  SS	KJr  SS
KJrJr  S\SS4S jr " S S\\S9rg)    N)ABCabstractmethod   )AttrDict)check_supported_deviceset_env_for_deviceupdate_device_num)DISABLE_CINN_MODEL_WLFLAGS_json_format_model)AutoRegisterABCMetaClass   )build_model)CINN_WHITELISTenable_cinn_backendconfigreturnBaseTrainerc                     U R                   R                  n  [        R	                  U5      " U 5      $ ! [         a     N'f = f)zbuild model trainer

Args:
    config (AttrDict): PaddleX pipeline config, which is loaded from pipeline yaml file.

Returns:
    BaseTrainer: the trainer, which is subclass of BaseTrainer.
)GlobalmodelModuleNotFoundErrorr   get)r   
model_names     \/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/paddlex/modules/base/trainer.pybuild_trainerr      sE     $$J ??:&v..  s   
A Ac                      ^  \ rS rSrSrSrS\4U 4S jjrS rSS\	4S jjr
SS	\S
\	4S jjr\S 5       r\S 5       rSrU =r$ )r   /   zBase Model TrainerTr   c                 P  > [         TU ]  5         Xl        UR                  U l        UR
                  U l        UR                  U l        UR                  SS5      U l
        U R                  R                  SS5      n[        U R                  R                  US9u  U l        U l        g)zzInitialize the instance.

Args:
    config (AttrDict):  PaddleX pipeline config, which is loaded from pipeline yaml file.
	BenchmarkNbasic_config_path)config_path)super__init__r   r   global_configTraintrain_configEvaluateeval_configr   benchmark_configr   r   
pdx_config	pdx_model)selfr   r!   	__class__s      r   r#   BaseTrainer.__init__4   s     	#]]"LL!?? &

; =''++,?F*5$$++
'    c                    [         R                  " U R                  R                  SS9  U R	                  5         U R                  5         U R                  5       nU R                  b  UR                  SU R                  05        U R                  R                  SS5      =(       d    [        nUR                  U R                  R                  SS5      UU R                  R                  SS5      S	.5        [        (       dI  U R                  R                  S
S5      (       a(  U R                  R                  [        ;   a
  [        5         U R                   R"                  " S0 UD6nUR$                  S:X  d   SUR$                   S35       eg)zexecute model trainingT)exist_okN	benchmarkexport_with_pirFuniform_output_enableddist_ips)r4   r3   ipsdy2str   z Encountered an unexpected error(z) in training! )osmakedirsr$   outputupdate_configdump_configget_train_kwargsr)   updater   r   r&   r
   r   r   r   r+   train
returncode)r,   argskwargs
train_argsr3   train_results         r   r@   BaseTrainer.trainF   sX   
D&&--=**,
  ,{D,A,ABC""#4e<W@W 	 	*.*;*;*?*?,d+ $3((,,Z>	
 &%!!%%gu55""((N:!~~++9j9##q(	-l.E.E-F G
 	(r/   config_file_pathc                     Uc4  [         R                  R                  U R                  R                  S5      nU R
                  R                  U5        g)zdump the config

Args:
    config_file_path (str, optional): the path to save dumped config. Defaults to None,
        means that save in `Global.output` as `config.yaml`.
Nzconfig.yaml)r9   pathjoinr$   r;   r*   dump)r,   rG   s     r   r=   BaseTrainer.dump_configi   s>     #!ww||D,>,>,E,E}U-.r/   using_device_numberr   c                 J   [        U R                  R                  U R                  R                  5        [	        U R                  R                  5        U(       a   [        U R                  R                  U5      OU R                  R                  nUR                  SS5      nU$ )zget device setting from config

Args:
    using_device_number (int, optional): specify device number to use. Defaults to None,
        means that base on config setting.

Returns:
    str: device setting, such as: `gpu:0,1`, `npu:0,1` `cpu`.
dcugpu)r   r$   devicer   r   r	   replace)r,   rM   device_settings      r   
get_deviceBaseTrainer.get_devicet   s     	t1188$:L:L:R:RS4--445 # d00779LM##** 	 (//u=r/   c                     [         e)zupdate training configNotImplementedErrorr,   s    r   r<   BaseTrainer.update_config   
     "!r/   c                     [         e)z2get key-value arguments of model training functionrW   rY   s    r   r>   BaseTrainer.get_train_kwargs   r[   r/   )r)   r   r(   r$   r*   r+   r&   )N)__name__
__module____qualname____firstlineno____doc___BaseTrainer__is_baser   r#   r@   strr=   intrT   r   r<   r>   __static_attributes____classcell__)r-   s   @r   r   r   /   sd    I
x 
$!F	/C 	/c S * " " " "r/   )	metaclass)r9   abcr   r   utils.configr   utils.devicer   r   r	   utils.flagsr
   r   
utils.miscr   r   utils.cinn_settingr   r   r   r   r8   r/   r   <module>ro      sM    
 # $ 
 J 2 $ C/( /} /"b"#!9 b"r/   