
    x-j#                         d dl Z d dlZd dlmZ ddlmZ g ZdZdZdZ	dZ
dZd	 Z G d
 d          Z e            ZddededdfdZdefdZedfdededdfdZd Zd Zd Zd Zd ZdS )    N)
log_helper   )ast_to_source_codeTRANSLATOR_VERBOSITYTRANSLATOR_CODE_LEVELd   c                       fd}|S )Nc                  n    t          j                    5   | i |cd d d            S # 1 swxY w Y   d S N)	threadingLock)argskwargsfuncs     b/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/jit/dy2static/logging_utils.pywrapperzsynchronized.<locals>.wrapper!   s    ^ 	) 	)4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   *.. )r   r   s   ` r   synchronizedr       s#    ) ) ) ) ) N    c                   L   e Zd ZdZed             Zd Zed             Zed             Z	e	j
        d             Z	ed             Zej
        d             Zed	             Zej
        d
             Zed             Zej
        d             Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TranslatorLoggerz
    class for Logging and debugging during the transformation from dygraph to static graph.
    The object of this class is a singleton.
    c                 |    t          | d          s&t          j        | g|R i || _        d| j        _        | j        S )N	_instanceF)hasattrobject__new__r   _initialized)clsr   r   s      r   r   zTranslatorLogger.__new__.   sG    sK(( 	/"N3@@@@@@CM).CM&}r   c                     | j         rd S d| _         d| _        t          j        | j        dd          | _        d | _        d | _        d | _        d | _        d S )NTzDynamic-to-Staticr   z/%(asctime)s %(name)s %(levelname)s: %(message)s)fmt)	r   logger_namer   
get_logger_logger_verbosity_level_transformed_code_level_need_to_echo_log_to_stdout_need_to_echo_code_to_stdoutselfs    r   __init__zTranslatorLogger.__init__5   so     	F .!,A
 
 

 !%'+$+/(,0)))r   c                     | j         S r   )r$   r)   s    r   loggerzTranslatorLogger.loggerE   s
    |r   c                 v    | j         | j         S t          t          j        t          t
                              S r   )r%   intosgetenvVERBOSITY_ENV_NAMEDEFAULT_VERBOSITYr)   s    r   verbosity_levelz TranslatorLogger.verbosity_levelI   s0     ,((ry!35FGGHHHr   c                 >    |                      |           || _        d S r   )check_levelr%   r*   levels     r   r4   z TranslatorLogger.verbosity_levelP   s$     %r   c                 v    | j         | j         S t          t          j        t          t
                              S r   )r&   r/   r0   r1   CODE_LEVEL_ENV_NAMEDEFAULT_CODE_LEVELr)   s    r   transformed_code_levelz'TranslatorLogger.transformed_code_levelU   s0    '3//ry!46HIIJJJr   c                 >    |                      |           || _        d S r   )r6   r&   r7   s     r   r<   z'TranslatorLogger.transformed_code_level\   s$    ',$$$r   c                 "    | j         | j         S dS NF)r'   r)   s    r   need_to_echo_log_to_stdoutz+TranslatorLogger.need_to_echo_log_to_stdouta   s    +733ur   c                 `    t          |t          t          d           f          sJ || _        d S r   )
isinstancebooltyper'   )r*   log_to_stdouts     r   r@   z+TranslatorLogger.need_to_echo_log_to_stdoutg   s1    -$T

);<<<<<+8(((r   c                 "    | j         | j         S dS r?   )r(   r)   s    r   need_to_echo_code_to_stdoutz,TranslatorLogger.need_to_echo_code_to_stdoutl   s    ,844ur   c                 `    t          |t          t          d           f          sJ || _        d S r   )rB   rC   rD   r(   )r*   code_to_stdouts     r   rG   z,TranslatorLogger.need_to_echo_code_to_stdoutr   s1    .4d*<=====,:)))r   c                 x    t          |t          t          d           f          r|}nt          d|           |S )NzLevel is not an integer: )rB   r/   rD   	TypeError)r*   r8   rvs      r   r6   zTranslatorLogger.check_levelw   sC    ec4::.// 	ABB???@@@	r   c                 B    |                      |          }|| j        k    S r   )r6   r<   r7   s     r   has_code_levelzTranslatorLogger.has_code_level~   s#      ''333r   c                 B    |                      |          }| j        |k    S )a,  
        Checks whether the verbosity level set by the user is greater than or equal to the log level.
        Args:
            level(int): The level of log.
        Returns:
            True if the verbosity level set by the user is greater than or equal to the log level, otherwise False.
        )r6   r4   r7   s     r   has_verbosityzTranslatorLogger.has_verbosity   s%       ''#u,,r   c                 f     | j         j        |g|R i | | j        r | j        d|z   g|R   d S d S )NzERROR: )r-   errorr@   _output_to_stdoutr*   msgr   r   s       r   rR   zTranslatorLogger.error   sa    #///////* 	;"D"9s?:T::::::	; 	;r   c                     | j         dk    r0 | j        j        |g|R i | | j        r | j        d|z   g|R   d S d S d S )Nr   z	WARNING: )r4   r-   warningr@   rS   rT   s       r   warnzTranslatorLogger.warn   s{    2%%DK5d555f555. A&&{S'8@4@@@@@@ &%A Ar   c                     |                      |          r8d| d| } | j        j        |g|R i | | j        r | j        d|z   g|R   d S d S d S )Nz(Level z) INFO: )rP   r-   infor@   rS   )r*   r8   rU   r   r   msg_with_levels         r   logzTranslatorLogger.log   s    e$$ 	I5u5555NDK^=d===f===. I&&x.'@H4HHHHHH		I 	II Ir   c                     |                      |          r_t          |          }|t          k    rd| d}n	d| d| d}||z   } | j        j        |g|R i | | j        r | j        d|z   g|R   d S d S d S )Nz'After the last level ast transformer: 'z', the transformed code:
zAfter the level z ast transformer: 'rZ   )rN   r   LOG_AllTransformerr-   r[   rG   rS   )	r*   r8   ast_nodetransformer_namer   r   source_code
header_msgrU   s	            r   log_transformed_codez%TranslatorLogger.log_transformed_code   s     u%% 	>,X66K***sGWsss

vvvJZvvv
{*CDKS242226222/ >&&x#~=======	> 	>> >r   c                 D    | j         dz   |z   }t          ||z             d S )N )r"   print)r*   rU   r   s      r   rS   z"TranslatorLogger._output_to_stdout   s,    $s*cDjr   N)__name__
__module____qualname____doc__r   r   r+   propertyr-   r4   setterr<   r@   rG   r6   rN   rP   rR   rX   r]   rd   rS   r   r   r   r   r   (   s        
   \1 1 1    X I I XI & & & K K XK "- - #"-   X
  &9 9 '&9   X
 !'; ; (';  4 4 4	- 	- 	-; ; ;
A A AI I I> > >     r   r   Fr8   also_to_stdoutreturnc                 6    | t           _        |t           _        dS )a  
    Sets the verbosity level of log for dygraph to static graph. Logs can be output to stdout by setting `also_to_stdout`.

    There are two means to set the logging verbosity:

    1. Call function `set_verbosity`

    2. Set environment variable `TRANSLATOR_VERBOSITY`


    **Note**:
    `set_verbosity` has a higher priority than the environment variable.

    Args:
        level(int): The verbosity level. The larger value indicates more verbosity.
            The default value is 0, which means no logging.
        also_to_stdout(bool): Whether to also output log messages to `sys.stdout`.

    Examples:
        .. code-block:: python

            >>> import os
            >>> import paddle

            >>> paddle.jit.set_verbosity(1)
            >>> # The verbosity level is now 1

            >>> os.environ['TRANSLATOR_VERBOSITY'] = '3'
            >>> # The verbosity level is now 3, but it has no effect because it has a lower priority than `set_verbosity`
    N)_TRANSLATOR_LOGGERr4   r@   r8   rn   s     r   set_verbosityrs      s    > */&4B111r   c                      t           j        S r   )rq   r4   r   r   r   get_verbosityru      s    --r   c                 6    | t           _        |t           _        dS )aE  
    Sets the level to print code from specific level Ast Transformer. Code can be output to stdout by setting `also_to_stdout`.

    There are two means to set the code level:

    1. Call function `set_code_level`

    2. Set environment variable `TRANSLATOR_CODE_LEVEL`


    **Note**:
    `set_code_level` has a higher priority than the environment variable.

    Args:
        level(int): The level to print code. Default is 100, which means to print the code after all AST Transformers.
        also_to_stdout(bool): Whether to also output code to `sys.stdout`.

    Examples:
        .. code-block:: python

            >>> import os
            >>> import paddle

            >>> paddle.jit.set_code_level(2)
            >>> # It will print the transformed code at level 2, which means to print the code after second transformer,
            >>> # as the date of August 28, 2020, it is CastTransformer.

            >>> os.environ['TRANSLATOR_CODE_LEVEL'] = '3'
            >>> # The code level is now 3, but it has no effect because it has a lower priority than `set_code_level`

    N)rq   r<   rG   rr   s     r   set_code_levelrw      s    D 16-5C222r   c                      t           j        S r   )rq   r<   r   r   r   get_code_levelry     s    44r   c                 0    t          j        | g|R i | d S r   )rq   rR   rU   r   r   s      r   rR   rR     s)    S24222622222r   c                 0    t          j        | g|R i | d S r   )rq   rX   r{   s      r   rX   rX     s)    C1$111&11111r   c                 2    t          j        | |g|R i | d S r   )rq   r]   )r8   rU   r   r   s       r   r]   r]     s+    5#777777777r   c                 4    t          j        | ||g|R i | d S r   )rq   rd   )r8   r`   ra   r   r   s        r   rd   rd     sC    +x),0  4:    r   )r   F)r0   r   paddle.baser   	ast_utilsr   __all__r2   r:   r3   r;   r_   r   r   rq   r/   rC   rs   ru   rw   ry   rR   rX   r]   rd   r   r   r   <module>r      s   
			     " " " " " " ) ) ) ) ) )
+ -      I I I I I I I IX &%''  C  C  C$  C4  C  C  C  CF.s . . . .
 $E#D #D#D59#D	#D #D #D #DL5 5 53 3 32 2 28 8 8    r   