o
     jgf                     @   s   d dl Z d dlZejfddZdddZG dd dZG d	d
 d
ZG dd dZdddZ	dddZ
dd Z		dddZdS )    Nc                 C   s&   t | g|}t |pt |S N)nparrayZastypeisinfisnan)valuedtyper    r	   \/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/amp/accuracy_compare.pyis_infinite   s   r   {Gz?c                 C   s"   t jt | gt |g||dS )N)atolrtol)r   Zallcloser   )actualexpectedr   r   r	   r	   r
   is_allclose   s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TensorInfoc                 C   sF   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d S r   )deviceop_typetensor_namer   numel	max_value	min_value
mean_valuehas_infhas_nannum_zeroselfr	   r	   r
   __init__#   s   
zTensorInfo.__init__c                 C   s4   d | j| j| j| j| j| j| j| j| j	| j
| jS )Nz[TensorInfo] device={}, op_type={}, tensor_name={}, dtype={}, numel={}, num_inf={}, num_nan={}, num_zero={}, max_value={:.6f}, min_value={:.6f}, mean_value={:.6f})formatr   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r
   __str__0   s   zTensorInfo.__str__c                 C   s   | j d | j S )N/)r   r   r   r	   r	   r
   key?   s   zTensorInfo.keyc              
   C   s  z|  d}|D ]}|dddddd}|d}|d dkr+|d	 | _q
|d d
kr7|d	 | _q
|d dkrC|d	 | _q
|d dkrO|d	 | _q
|d dkr^t|d	 | _	q
|d dkrmt
|d	 | _q
|d dkr|t
|d	 | _q
|d dkrt
|d	 | _q
|d dkrt|d	 | _q
|d dkrt|d	 | _q
|d dkrt|d	 | _q
W | S  ty } ztd|  W Y d }~| S d }~ww )N [ ],=r   op   r   Ztensorr   r   maxminmeannum_infnum_nanr   z!! Error parsing )stripsplitreplacer   r   r   r   r   Zint64r   Zfloat32r   r   r   intr   r   r   	Exceptionprint)r   lineZ
line_fragsfragZword_strwordser	   r	   r
   init_from_stringD   sH   
zTensorInfo.init_from_stringN)__name__
__module____qualname__r   r!   r#   r;   r	   r	   r	   r
   r   "   s
    r   c                   @   s8   e Zd Z	dddZdd Zdd Zd	d
 Zdd ZdS )MixedPrecisionTensorInfor         ?c                 C   s  d| _ || _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _|d urt|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _d| jv rt||j | _||j | _	|d ur|j| _|j| _|j| _|j| _
|j| _|j| _|j| _|j| _|j| _|j| _|d ur|d ur|j|jksJ |j|jksJ d|||  | j| j| _|  | j| j| _|  | j| j| _| !  d S )NTZGRADz0Error:
	FP32 Tensor Info:{}
	FP16 Tensor Info:{})"	is_normalfp32_idxfp32_tensor_name
fp32_dtypefp32_max_valuefp32_min_valuefp32_mean_valuefp32_num_zeroscaled_fp32_max_valuescaled_fp32_min_valuefp16_tensor_name
fp16_dtypefp16_max_valuefp16_min_valuefp16_mean_valueZfp16_num_zerofp16_has_inffp16_has_nanfp32_div_fp16_max_valuefp32_div_fp16_min_valuefp32_div_fp16_mean_valuer   r   r   r   r   r   r   r   r   r   r    _div_check_normal)r   fp32_tensor_infofp16_tensor_inforB   
grad_scaler	   r	   r
   r   h   s~   
z!MixedPrecisionTensorInfo.__init__c              
   C   s|   dd }d | j| j}|d | j| j|| j|| j|| j7 }|d | j| j	|| j
|| j|| j| j| j7 }|S )Nc                 S   s   | d ur| dS | S )N.6fr	   )r   r	   r	   r
   
_float_str   s   z4MixedPrecisionTensorInfo.__str__.<locals>._float_strz/[MixedPrecisionTensorInfo] op_type={}, numel={}zL
  FP32: tensor_name={}, dtype={}, max_value={}, min_value={}, mean_value={}zd
  FP16: tensor_name={}, dtype={}, max_value={}, min_value={}, mean_value={}, has_inf={}, has_nan={})r    r   r   rC   rD   rE   rF   rG   rK   rL   rM   rN   rO   rP   rQ   )r   r[   Z	debug_strr	   r	   r
   r!      s*   	z MixedPrecisionTensorInfo.__str__c                 C   s(   |d ur|d ur|dkr|| S dS d S )Nr   r+   r	   )r   abr	   r	   r
   rU      s   zMixedPrecisionTensorInfo._divc                 C   sJ   | j d u r| jS | jd u r| j d t| j S | jddd t| j S )N#
.cast_fp16z/.cast_fp16/)rC   rK   strrB   r3   r   r	   r	   r
   get_tensor_name   s   

z(MixedPrecisionTensorInfo.get_tensor_namec                 C   s  | j d ur| j ttjjkrd| _d S | j| j| j| j	| j
| jg}|D ]}|d ur4t|r4d| _ d S q$| jd urB| jrBd| _d S | jd urO| jrOd| _d S | jd ure| j
d uret| j
| jsed| _d S | j	d ur{| jd ur}t| j| j	sd| _d S d S d S d S )NF)r   r   iinfoint32r,   rA   rE   rF   rI   rJ   rM   rN   r   rP   rQ   r   )r   Z
check_listr   r	   r	   r
   rV      sF   	



z&MixedPrecisionTensorInfo._check_normalN)r   r@   )r<   r=   r>   r   r!   rU   ra   rV   r	   r	   r	   r
   r?   g   s    
Nr?   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Z		dd
dZ		dddZdd Z	dd Z
dd Zdd ZdS )ExcelWriterc                 C   s   || _ || _zdd l}W n ty   td Y nw ||| _| jdddddd| _| jdd	d
| _	| jddd
| _
| jddd
| _| jddd
| _d S )Nr   zRimport xlsxwriter failed. please run 'pip install xlsxwriter==3.0.9' to install itTr+   blackz#6495EDcenter)boldborderZ
font_colorbg_coloralignz#F5F5F5)rg   ri   redyellowZorange)log_fp32_dirlog_fp16_dirZ
xlsxwriterImportErrorr6   ZWorkbookworkbookZ
add_formattitle_formattensor_name_formatred_bg_cell_formatyellow_bg_cell_formatorange_bg_cell_format)r   rm   rn   Zoutput_pathZxlwr	   r	   r
   r     s<   	
zExcelWriter.__init__c                 C   s   | j   d | _ d S r   )rp   closer   r	   r	   r
   rv   3  s   

zExcelWriter.closec                 C   J   |d u r| ||d d S |dkr| |||| j d S | ||| d S )N--Zfp16)writert   r   	worksheetr   rowcolr	   r	   r
   _write_dtype7  
   zExcelWriter._write_dtypec                 C   s@   |  }|jd ur|jr||||| j d S |||| d S r   )ra   rC   rK   ry   rr   )r   r{   mp_tensor_infor|   r}   r   r	   r	   r
   _write_tensor_name@  s   
zExcelWriter._write_tensor_nameTc                 C   sp   |d u r| ||d d S t|dk r|d}n|d}|r/t|tjr/| |||| j d S | ||| d S )Nrx   gh㈵>z.6ErZ   )ry   absr   r   float16rs   r   r{   r   r|   r}   Zcheck_finite	value_strr	   r	   r
   _write_maxmin_valueJ  s   
zExcelWriter._write_maxmin_valuec                 C   s4   |d u r| ||d d S |d}| ||| d S )Nrx   z>10d)ry   r   r	   r	   r
   _write_tensor_num_zeroY  s   z"ExcelWriter._write_tensor_num_zeroc                 C   rw   )Nrx   r+   )ry   rs   rz   r	   r	   r
   _write_infinite_statusb  r   z"ExcelWriter._write_infinite_statusc                 C   sj   ddd}|d u r| ||d d S |d}||dds!|||r*| ||| d S | |||| j d S )Nr+   c                 S   s   | |d ko| |d k S )Ngffffff?g?r	   )r   scaler	   r	   r
   	_in_rangel  s   z7ExcelWriter._write_fp32divfp16_value.<locals>._in_rangerx   rZ   )r   )r+   )ry   ru   )r   r{   r   r|   r}   
loss_scaler   r   r	   r	   r
   _write_fp32divfp16_valuek  s   
z$ExcelWriter._write_fp32divfp16_valuec                 C   sH  dddddddddddd}g d}| j d u r3|dd	| j |d
d| d| j |g d n<| jd u rL|dd| d| j |g d n#|dd	| j |dd| d| j |dd| j |g d tt|D ]}ttd| }|	|d | |||   qutt|D ]}|
|||| | j qd S )N   <   
         )r   r   r   r   infiniter   r   r   r   r/   r0   )r   r   r   r   zE1:H1Zfp32zI1:J1zfp32 (scale=))r   r   r   r   r   r   zE1:J1zfp16 (scale=)r   r   r   r   r   r/   r0   zI1:N1zO1:Q1zfp16 / fp32)r   r   r   r   r   r   r   r   r   r   r/   r0   r   r   r   A:)rn   Zmerge_rangerq   extendrm   rangelenchrordZ
set_columnry   )r   r{   r   r|   Zcolumn_width_dictZtitle_namesr}   Zcol_charr	   r	   r
   _write_titlesx  sX   


zExcelWriter._write_titlesc           
      C   s  | j d usJ | j |}d}| ||| |d7 }g }|D ]A}|js/|j|vr/||j |r5|jr5q||d|j | |||d |jt	
t	jjkrZ||d|j| j n||d|j |jrm||dd n	||dd| j d}	| jd ur| ||j||	 | ||j||	d  | ||j||	d  | ||j||	d  | ||j||	d  |	d7 }	| jd u r| ||j||	 | ||j||	d  |	d7 }	| jd ur*| ||j||	 | ||j||	d  | ||j||	d  | ||j||	d  | ||j||	d  |	d7 }	| ||j ||	 | ||j!||	d  |	d7 }	| jd ur\| jd ur\| "||j#||	| | "||j$||	d | | "||j%||	d | |	d7 }	|d7 }qt&d	|  d S )
Nr+   r         01      z&-- OP Types produce infinite outputs: )'rp   add_worksheetr   rA   r   appendry   r   r   r   rb   rc   r,   Zbad_value_formatrs   rm   r~   rD   r   rE   rF   rG   r   rH   rn   rI   rJ   rL   rM   rN   rO   r   rP   rQ   r   rR   rS   rT   r6   )
r   mp_tensor_info_listZ	sheetnamer   Zskip_normal_tensorsr{   r|   Zinfinite_op_typestensor_infor}   r	   r	   r
   r     s   







zExcelWriter.add_worksheetN)T)r<   r=   r>   r   rv   r~   r   r   r   r   r   r   r   r	   r	   r	   r
   rd     s    "	

		Rrd   c                 C   s   g }t t| D ]C}|d dkr!td|ddt| dddd | | }d	|v rKt }|| |jd ur=|jd
kr=d}|d u sF|j|v rK|| q|S )Nr   r   z-- Processing z-8dz / z lineendz[PRECISION]r&   T)r   r   r6   r   r;   r   r   r   )linesspecified_op_listtensor_info_listir7   r   has_tensor_namer	   r	   r
   parse_linesB  s&   




r   c                 C   s   | d u s|d u r
d S | d | }d }d}z(t |d}| }t||}W d    n1 s.w   Y  W ||fS W ||fS  tyO   td|d d |f Y S w )Nr"   Frz	the file zis not found)open	readlinesr   FileNotFoundErrorr6   )Zlog_dirfilenamer   Zcomplete_filenamer   r   fr   r	   r	   r
   	parse_log]  s"   r   c                 C   s  g }|d uri }i }| d ur-| D ]}|  }||d}|d ||< |||d t| < qi }	tt|D ]L}
|
d dkrItd|
t|dd ||
 }|  dd	d
d	}|	|d}||d t| d }|d uru|d |	|< t||||}|	| q5|S | d uri }tt| D ]4}
|
d dkrtd|
t| dd | |
 }|  }||d}|d ||< t|d ||}|	| q|S )Nr   r+   r^   r   z.-- Processing {:-8d} / {:-8d} FP16 Tensor Infor   r   r_   r&   z
.cast_fp32z.-- Processing {:-8d} / {:-8d} FP32 Tensor Info)
r#   getr`   r   r   r6   r    r3   r?   r   )fp32_tensor_info_listfp16_tensor_info_listrY   r   Zfp32_tensor_info_dictZfp32_write_countr   Ztensor_info_keycountZfp32_read_countr   rX   Zfp32_tensor_info_keyrW   r   Z
fp32_countr	   r	   r
   merge_tensor_info_listo  sr   r   r+   Fc                 C   s   t | ||}|}g }t| }|D ]}	d|	v r||	 qtdt|| | t|D ]B}
td|  d|
  t| |
d \}}td| d|
  t||
d \}}td|
  t	|||}td|
  |
||
|d q,td	|  td
 |  d S )NZworker_z'-- There are {} workerlogs under {}: {}z&-- [Step 1/4] Parsing FP32 logs under r"   z&-- [Step 2/4] Parsing FP16 logs under z2-- [Step 3/4] Merge FP32 and FP16 tensor info for z?-- [Step 4/4] Add worksheet for mixed precision tensor info of Fz-- Write to r&   )rd   oslistdirr   r6   r    r   sortedr   r   r   rv   )Z	dump_pathZanother_dump_pathZoutput_filenamer   Zdump_all_tensorsZexcel_writerrY   Zworkerlog_filenames	filenamesnamer   r   Zfp32_has_tensor_namer   Zfp16_has_tensor_namer   r	   r	   r
   compare_accuracy  sP   


r   )r   r   r   )r+   F)r   numpyr   r   r   r   r   r?   rd   r   r   r   r   r	   r	   r	   r
   <module>   s    
E *  
4
D