o
    "j                     @   s   d dl Z d dlZd dlZd dlmZmZmZmZmZ ddl	m
Z
mZ 												dddZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZdS )    N)CallbackCallbackListLRSchedulerModelCheckpointProgBarLogger   )CollectionNamesget_collection   trainc                 C   s|  | pg }t |ttfr|n|g}tdd |D s$|r$t||dg| }tdd |D s3t g| }tdd |D sD|t||g }tdd |D sY|dkrY|tdd	g }td
d |D sh|t g }t	|D ].\}}t |t
r~t|j|j||< t |trt|j|j||< t |trt|j|j||< qlt|}|| |dkr|	pg ng }	|||||	|
d}|| |S )Nc                 s       | ]}t |tV  qd S N)
isinstancer   .0k r   r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/auto_parallel/static/callbacks.py	<genexpr>/       z#config_callbacks.<locals>.<genexpr>)verbosec                 s   r   r   )r   r   r   r   r   r   r   2   r   c                 s   r   r   )r   r   r   r   r   r   r   5   r   c                 s   r   r   )r   Profilerr   r   r   r   r   8   r      T)Z
timer_onlyc                 s   r   r   )r   Historyr   r   r   r   r   ;   r   test)
batch_sizeepochsstepsr   metricsacc_step)r   listtupleanyProgBarLoggerAutoLRSchedulerAutoModelCheckpointAutor   r   	enumerater   log_freqr   r   by_stepby_epochr   	save_freqsave_dirr   Z	set_modelZ
set_params)	callbacksZenginer   r   r   r'   r   r*   r+   r   r   modeZcbksir   Zcbk_listparamsr   r   r   config_callbacks   sD   



 
r0   c                       s8   e Zd Zd fdd	Zdd Zdd Zdd
dZ  ZS )r#   r
   r   c                       t  || d S r   super__init__)selfr'   r   	__class__r   r   r4   V      zProgBarLoggerAuto.__init__c                 C   s   dS )NTr   r5   r   r   r   	_is_printY   s   zProgBarLoggerAuto._is_printc                 C   s  g }t | d| }t | d| }t | d| }|D ]}||v r(|||| f qd|v r6|d|d f |di }ttj}	|	D ]\}
}|
pK|j}||v rY|||| f qC|di }|D ]}|||| f qb| jdkrt| d| rt | d| }|d	 d
kr|d	 nd}|d d
kr|d nd}|dd|d |  f |dd|d |  f |dd||d |d    f d
|d	< d
|d< d|d< d|d< |	|| d S )Nz
%s_metricsz
%s_progbarz%s_steplrZfetchesZoutputsr   z	_%s_timercountr   g      ?samplesZavg_reader_costz%.5f secZ	data_timeZavg_batch_cost
batch_timeipsz%.5f samples/secg        )
getattrappendgetr	   r   ZLOGGINGnamer   hasattrupdate)r5   logsr-   valuesr   Zprogbarr   r   Zfetches_logsZcollect_loggingrC   varZout_logsZtimerZcntr=   r   r   r   _updates\   sT   

zProgBarLoggerAuto._updatesNc                 C   s   |pi }|  j d7  _ | jd }|  j|7  _| jd  t | jd  7  < | jd  d7  < | jd }| jd  |7  < |  r[| j | j dkr[| jd u sU| j | jk r[| |d t | jd	< d S )
Nr
   r   r>   Zbatch_data_end_timer<   r=   r   evalZbatch_start_time)	Z	eval_stepr/   Zevaled_samplesZ_eval_timertimer:   r'   Z
eval_stepsrI   )r5   steprF   r=   r   r   r   on_eval_batch_end   s   


z#ProgBarLoggerAuto.on_eval_batch_end)r
   r   r   )__name__
__module____qualname__r4   r:   rI   rM   __classcell__r   r   r6   r   r#   U   s
    0r#   c                       s2   e Zd Zd
 fdd	ZdddZddd	Z  ZS )r$   TFc                    r1   r   r2   )r5   r(   r)   r6   r   r   r4      r8   zLRSchedulerAuto.__init__Nc                 C   s   | j d | _|| _d| _d S )Nr   r   )r/   r   epoch
train_stepr5   rR   rF   r   r   r   on_epoch_begin   s   
zLRSchedulerAuto.on_epoch_beginc                 C   sv   |  j d7  _ | jr1| j | j dkr3| jjr5t| jjdr7t| jjjtjj	j
r9| jjj  d S d S d S d S d S d S )Nr
   r   _learning_rate)rS   r(   r   modelZ	optimizerrD   r   rV   paddler;   r   rL   r5   rL   rF   r   r   r   on_train_batch_end   s   z"LRSchedulerAuto.on_train_batch_end)TFNNr   )rN   rO   rP   r4   rU   rZ   rQ   r   r   r6   r   r$      s    
r$   c                   @   s(   e Zd Zdd ZdddZdddZdS )	r   c                 C   s
   i | _ d S r   )historyr9   r   r   r   r4         
zHistory.__init__Nc                 C   s
   g | _ d S r   )rR   r5   rF   r   r   r   on_train_begin   r]   zHistory.on_train_beginc                 C   sF   |pi }| j | | D ]\}}| j|g | q| | j_d S r   )rR   rA   itemsr\   
setdefaultrW   )r5   rR   rF   r   vr   r   r   on_epoch_end   s
   zHistory.on_epoch_endr   )rN   rO   rP   r4   r_   rc   r   r   r   r   r      s    
r   c                   @   s<   e Zd Zdd ZdddZdddZddd	Zdd
dZdS )r   c                 O   s   t jj|i || _d S r   )rX   Zprofilerr   profr5   argskwargsr   r   r   r4      s   zProfiler.__init__Nc                 C   s(   || _ d| _| jd | _| jd | _d S )Nr   r   r   )rR   rS   r/   r   r   rT   r   r   r   rU      s   zProfiler.on_epoch_beginc                 C   s   | j   d S r   )rd   startr^   r   r   r   r_      s   zProfiler.on_train_beginc                 C   s>   |  j d7  _ | jj| jd td| j | jjdd d S )Nr
   )Znum_samplesz
step {}:{}r=   )unit)rS   rd   rL   r   printformatZ	step_inforY   r   r   r   rZ      s   zProfiler.on_train_batch_endc                 C   s   | j   | j   d S r   )rd   stopsummaryr^   r   r   r   on_train_end   s   
zProfiler.on_train_endr[   r   )rN   rO   rP   r4   rU   r_   rZ   rn   r   r   r   r   r      s    


	r   c                       s8   e Zd Z fddZdd Zd
ddZd
dd	Z  ZS )r%   c                    s   t  j|i | d S r   r2   re   r6   r   r   r4      s   zModelCheckpointAuto.__init__c                 C   s   | j o| jS r   )rW   r+   r9   r   r   r   _is_save   s   zModelCheckpointAuto._is_saveNc                 C   sZ   |   r)| jd | j dkr+| j d| }tdtj|  | j	| d S d S d S )Nr
   r   z/epochsave checkpoint at )
ro   rR   r*   r+   rj   ospathabspathrW   save)r5   rR   rF   rr   r   r   r   rc      s
   z ModelCheckpointAuto.on_epoch_endc                 C   s>   |   r| j d}tdtj|  | j| d S d S )Nz/finalrp   )ro   r+   rj   rq   rr   rs   rW   rt   )r5   rF   rr   r   r   r   rn      s
   z ModelCheckpointAuto.on_train_endr   )rN   rO   rP   r4   ro   rc   rn   rQ   r   r   r6   r   r%      s
    
r%   )NNNNNr   r   r
   NNr
   r   )rq   rK   rX   Zpaddle.hapi.callbacksr   r   r   r   r   Z	interfacer   r	   r0   r#   r$   r   r   r%   r   r   r   r   <module>   s.   
7K