
    x-jbB                     
   d dl Z d dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
 ddlmZmZ g ZdZdZdZdZd ZdZd	ZddZ G d de	          Z G d de	          Z G d d          Z G d de          Z G d d          ZdS )    N   )Location
OriginInfoglobal_origin_info_map)RE_PYMODULEis_api_in_module_helperz@Error data about original source code information and traceback.TRANSLATOR_SIMPLIFY_NEW_ERRORTRANSLATOR_DISABLE_NEW_ERROR      Fc                     t          j                    \  }}}t          j        |          dd         }t	          |||t
                    }||_        t          | t          |           | S )a_  
    Attaches error data about original source code information and traceback to an error.

    Args:
        error(Exception): An native error.
        in_runtime(bool): `error` is raised in runtime if in_runtime is True, otherwise in compile time
    Returns:
        An error attached data about original source code information and traceback.
    r   N)	sysexc_info	traceback
extract_tb	ErrorDatar   
in_runtimesetattr
ERROR_DATA)errorr   e_typee_valuee_tracebacktb
error_datas          Z/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/jit/dy2static/error.pyattach_error_datar   -   sb     $'<>> FG[		k	*	*122	.B67B0FGGJ&JE:z***L    c                       e Zd ZdZd Zd ZdS )TraceBackFrame&
    Traceback frame information.
    c                 >    || _         || _        || _        d| _        d S )N )locationfunction_namesource_code
error_line)selfr$   r%   r&   s       r   __init__zTraceBackFrame.__init__H   s$     *&r   c           
          dt           z  d                    | j        j        | j        j        | j        t          | j        t                    r| j        	                                n| j                  z   S )N zFile "{}", line {}, in {}
	{})
BLANK_COUNT_BEFORE_FILE_STRformatr$   filepathlinenor%   
isinstancer&   strlstripr(   s    r   formatted_messagez TraceBackFrame.formatted_messageN   sq     --/66&$" "$"2C88*D$++---)	 	
	
r   N__name__
__module____qualname____doc__r)   r4    r   r   r    r    C   s<           
 
 
 
 
r   r    c                       e Zd ZdZd Zd ZdS )TraceBackFrameRanger!   c                    || _         || _        g | _        d| _        g }t	          d| j         j        t          t          dz            z
            }t          ||t          z             D ]$}t          j
        | j         j        |                              d          }|                                }| j                            |           |s|                    d           n2|                    t          |          t          |          z
             || j         j        k    rg| j        d         | _        dt          | j        d                   z  dz   }| j                            |           |                    |d                    &t          | j                  dk    ra| j        d         sT| j                            d           |                    d           t          | j                  dk    r| j        d         Tt          | j                  dk    ra| j        d         sT| j                            d           |                    d           t          | j                  dk    r| j        d         Tt#          d	 |D                       }	t          t          | j                            D ]>}| j        |         r/d
||         |	z
  t$          dz  z   z  | j        |         z   | j        |<   ?d S )Nr#   r      
~z
 <--- HEREr   c                     g | ]
}|d k    |S )r   r:   ).0is     r   
<listcomp>z0TraceBackFrameRange.__init__.<locals>.<listcomp>   s    @@@Qaqr   r+   )r$   r%   r&   r'   maxr/   intSOURCE_CODE_RANGErange	linecachegetliner.   rstripr2   appendlenpopminr,   )
r(   r$   r%   blank_countbegin_linenorD   lineline_lstriphint_msgmin_black_counts
             r   r)   zTraceBackFrameRange.__init__e   s    *1dm2S9JQ9N5O5OOPP|\4E%EFF 	4 	4A$T]%;Q??FFtLLD++--K##K000 A""2&&&&""3t99s;/?/?#?@@@DM((("&"22"6T%5b%9!:!::\I ''111"";r?333 $"##a''0@0C'  ###OOA $"##a''0@0C' $"##a''0@0D'  $$$OOB $"##a''0@0D' @@+@@@AAs4+,,-- 	 	A" 	#A)*59: &q)*  #	 	r   c                     dt           z  d| j        j         d| j        j         d| j         dz   }|d                    | j                  z   S )Nr+   zFile "z", line z, in r?   )r,   r$   r.   r/   r%   joinr&   )r(   msgs     r   r4   z%TraceBackFrameRange.formatted_message   s^    --ht}-hht}7KhhRVRdhhhi 	
 TYYt/0000r   Nr5   r:   r   r   r<   r<   `   s=         / / /b1 1 1 1 1r   r<   c                        e Zd Zd Zd Zd ZdS )SuggestionDictc                     ddi| _         d S )N)zis not initialized.zHint:IsInitialized)z=Please ensure all your sublayers are inherited from nn.Layer.zPlease ensure there is no tensor created explicitly depended on external data, we suggest to register it as buffer tensor. See https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/jit/principle_cn.html#buffers for detailssuggestion_dictr3   s    r   r)   zSuggestionDict.__init__   s     > @ 
r   c                 4    | j                                         S N)r_   keysr3   s    r   rb   zSuggestionDict.keys   s    #((***r   c                     | j         |         S ra   r^   )r(   keys     r   __getitem__zSuggestionDict.__getitem__   s    #C((r   N)r6   r7   r8   r)   rb   re   r:   r   r   r[   r[      sA        	
 	
 	
+ + +) ) ) ) )r   r[   c                       e Zd ZdS )Dy2StKeyErrorN)r6   r7   r8   r:   r   r   rg   rg      s        Dr   rg   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
r   zU
    Error data attached to an exception which is raised in un-transformed code.
    c                 r    || _         || _        || _        || _        d| _        t                      | _        d S )NF)
error_typeerror_valueorigin_tracebackorigin_info_mapr   r[   r_   )r(   rj   rk   rl   rm   s        r   r)   zErrorData.__init__   s>     %& 0.-//r   c                     |                                  }| j        t          u rt          |          }n|                     |          }t	          |t
          |            |S ra   )create_messagerj   KeyErrorrg   r   r   )r(   messagenew_exceptions      r   create_exceptionzErrorData.create_exception   sX    %%''?h&&)'22MM OOG44Mz4000r   c                    | j         t          ur|S | j        }d }|D ]@}t          j        dt
           d|j         |          }|r|                    d          } nA	 dt          i}t          ||          }t          |d          }	|	p)|                    d          p|                    d          }
n# t          $ r d}
Y nw xY w|
r|rd	| d
| ddgS |S )N(z)*r   npnumpyznumpy.znp.FzTypeError: Code 'z' called numpy API z&, please use Paddle API to replace it.z_           values will be changed to variables by dy2static, numpy api can not handle variables)rj   	TypeErrorrl   researchr   namegrouprv   evalr   
startswith	Exception)r(   format_exceptionr'   r   func_strframesearched_nameglobalsfnmodule_resultis_numpy_api_errs              r   numpy_api_checkzErrorData.numpy_api_check   sF   ?)++##" 	 	EI0[00EJ00 M  (..q11	%RjGh((B3B@@M,  ##H--K1D1DU1K1K   	% 	% 	%$	%  	$ 	$sJss8sssq 
 $#s   AB4 4CCc                 z   g }d}|                     |           |                     d           d}| j        r	 t          t          j        t
          t                              r|                                  |                     t          | j	                             d
                    |          S #  Y nxY wg }t          | j                  D ]>\  }\  }}}}	| j                            ||fd          }
|
r|                     |           ?|D ]}| j        |         \  }}}}	| j                            ||fd          }
||d         k    rt          |
j        |
j                  }n t%          |
j        |
j        |
j                  }|                     |                                           |j        }|                     d           |r|d         dz   nd}| j        |d         D ]M\  }}}}	t%          t-          ||          ||	          }|                     |                                           N|                     d           t/          j        | j        | j	                  }||                     ||          }d |D             }|                    |           d
                    |          S )	z~
        Creates a custom error message which includes trace stack with source code information of dygraph from user.
        zIn transformed code:r#   Nr?   r@   r   r   c                 (    g | ]}d t           z  |z   S r+   )r,   )rC   rS   s     r   rE   z,ErrorData.create_message.<locals>.<listcomp>C  s3     
 
 
 --4
 
 
r   )rM   r   rG   osgetenvSIMPLIFY_ERROR_ENV_NAMEDEFAULT_SIMPLIFY_NEW_ERROR_simplify_error_valuer1   rk   rX   	enumeraterl   rm   getr<   r$   r%   r    r&   r4   r'   r   r   format_exception_onlyrj   r   extend)r(   message_linesheader_messager'   user_code_traceback_indexrD   r.   r/   funcnamecodedygraph_func_infotraceback_framepaddle_traceback_start_indexr   error_messages                  r   ro   zErrorData.create_message   sR     0^,,,R   
 ? 	00I/1K   1
 ..000 $$S)9%:%:;;;yy///	 %'!5>!6
 6
 	4 	41A1&(D !% 4 8 86"D! ! ! 4)00333 + 	4 	4A/3/DQ/G,Hfh $ 4 8 86"D! ! -b111"5%.0A0O# # #1%.%3%1# #   !B!B!D!DEEE(3JJR   
 )%b)A-- 	%
 150E())1
 	F 	F,Hfh -6**Hd O   !B!B!D!DEEEER   
 %:OT-
 
 !#33 *   
 
(
 
 
 	]+++yy'''s   A B5 5B9c                 x   ddt           z  dz   g}| j                                        D ]z}fd|D             }t          |          t          |          k    rJ| j        |         D ]<}dt           z  dz  t          |          dz
   d| z   }|                    |           ={t          |          dk    r|ng S )Nr#   r+   zRevise suggestion: c                 B    g | ]}|d                                v dS )r#   T)rX   )rC   rD   bottom_error_messages     r   rE   z7ErrorData._create_revise_suggestion.<locals>.<listcomp>Q  s7          !rww7K/L/L*L*L*L*L*Lr   r>   r   z. )r,   r_   rb   rN   rM   )r(   r   revise_suggestionskeywordscontain_keywords
suggestionsuggestion_msgs    `     r   _create_revise_suggestionz#ErrorData._create_revise_suggestionK  s   --0EE
 ,1133 	> 	>H       &      #$$) )   #'"6x"@ > >J99A= !344q8HHJHHI # '--n====%();%<%<q%@%@!!bHr   c                    | j         du sJ t          | j                                      d          }d |D             }d}|                    |          }||dz   d         }||dz   d         }|                    d          }||dz   d         }|                     |          }g }g }	d}
i }| j                                        D ]$\  }}|j        j	        }|j        j
        }||||f<   %t          d	t          |          d
          D ]}||                             d          rt          j        |
||                   }|                                \  }}}|dz   t          |          k     r||dz            nd}|                    |t%          |          f          r"|	                    t          |                     |                    |t%          |          ||f           g }|	D ]}||         \  }}}}||	d         k    rt)          t+          ||          |          }nt-          t+          ||          ||          }|                    |                                           |                    d           |	r|	d         dz   nd	}||d         D ]M\  }}}}t-          t+          ||          ||          }|                    |                                           N|                    d           |                    |           |                    |           d                    |          }|                     |          | _        dS )a  
        Simplifies error value to improve readability if error is raised in runtime.

        NOTE(liym27): The op callstack information about transformed static code has been replaced with original dygraph code.

        TODO(liym27):
            1. Need a more robust way because the code of start_trace may change.
            2. Set the switch to determine whether to simplify error_value
        Tr?   c                 8    g | ]}|                     d           S r   )r2   )rC   mess     r   rE   z3ErrorData._simplify_error_value.<locals>.<listcomp>m  s"    "P"P"Ps3::c??"P"P"Pr   zoutputs = static_func(*inputs)r   Nr#   zFFile "(?P<filepath>.+)", line (?P<lineno>.+), in (?P<function_name>.+)r   r>   zFile r@   )r   r1   rk   splitindexr   rm   itemsr$   r.   r/   rI   rN   r~   ry   rz   groupsr   rG   rM   r<   r   r    r4   r   rX   rj   )r(   error_value_lineserror_value_lines_stripstart_trace	start_idxempty_line_idxr   revise_suggestionerror_tracebackr   patternstatic_info_mapkvorigin_filepathorigin_linenorD   	re_resulttmp_filepath
lineno_strr%   r   error_framer.   r/   r   r   r   error_value_strs                                r   r   zErrorData._simplify_error_value_  s    $&&&& 01177=="P"P>O"P"P"P6+11+>>	-i!moo>"9)a-//"J 166r::0!1C1E1EF ::;OPP$&!Z (..00 	B 	BDAqj1OJ-M@AO_m<==q#566:: 	 	A&q)44W== Ig/Fq/IJJ	:C:J:J:L:L7j- 1us#:;;;; ,AE22  #&&c*oo'FGG K-44S5I5IJJJ&&!3z??M4H   * 
	D 
	DA/>q/A,Hfh-b111"5Xv..# # #1Xv..$# # @@BBCCCC2
 )%b)A-- 	%
 1@())1
 	D 	D,Hfh -6**Hd O @@BBCCCC2/000,---))K00???;;r   c                     t          t          j        t          t                              r| j        |                                 }|d ra   )rG   r   r   DISABLE_ERROR_ENV_NAMEDEFAULT_DISABLE_NEW_ERRORrk   rs   )r(   rr   s     r   raise_new_exceptionzErrorData.raise_new_exception  sD    ry/1JKKLL 	#""--// %r   N)r6   r7   r8   r9   r)   rs   r   ro   r   r   r   r:   r   r   r   r      s         0 0 0  $ $ $@[( [( [(zI I I(X< X< X<t& & & & &r   r   )F)rJ   r   ry   r   r   rw   rv   origin_infor   r   r   utilsr   r   __all__r   r   r   r   r   rH   r,   r   r    r<   r[   r   rg   r   r:   r   r   <module>r      s       				 				 



         E E E E E E E E E E       
 O
 :   8       ,
 
 
 
 
Z 
 
 
:<1 <1 <1 <1 <1* <1 <1 <1~) ) ) ) ) ) ) )&	 	 	 	 	I 	 	 	P& P& P& P& P& P& P& P& P& P&r   