a
    d=ic–  ã                   @   st   d Z ddlZddlZddlZddlZddlmZ e ¡ Zddd„Z	G dd„ dej
ƒZeƒ Zejdd	„ ƒZd
d„ ZdS )z%Utilities for measuring elapsed time.é    N)Ú
tb_loggingc                 C   s\   |du rt j}t| tƒr&| }t||ƒS | }t|ddƒ}|du rFt|ƒ}t||ƒ}||ƒS dS )aê  Log latency in a function or region.

    Three usages are supported. As a decorator:

    >>> @log_latency
    ... def function_1():
    ...     pass
    ...


    As a decorator with a custom label for the region:

    >>> @log_latency("custom_label")
    ... def function_2():
    ...     pass
    ...

    As a context manager:

    >>> def function_3():
    ...     with log_latency("region_within_function"):
    ...         pass
    ...

    Args:
        region_name_or_function_to_decorate: Either: a `str`, in which
            case the result of this function may be used as either a
            decorator or a context manager; or a callable, in which case
            the result of this function is a decorated version of that
            callable.
        log_level: Optional integer logging level constant. Defaults to
            `logging.INFO`.

    Returns:
        A decorated version of the input callable, or a dual
        decorator/context manager with the input region name.
    NÚ__qualname__)ÚloggingÚINFOÚ
isinstanceÚstrÚ_log_latencyÚgetattr)Z#region_name_or_function_to_decorateÚ	log_levelZregion_nameZfunction_to_decorateÚqualnameÚ	decorator© r   úh/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/tensorboard/util/timing.pyÚlog_latency   s    '


r   c                   @   s   e Zd Zdd„ ZdS )Ú_ThreadLocalStorec                 C   s
   d| _ d S )Nr   )Únesting_level)Úselfr   r   r   Ú__init__R   s    z_ThreadLocalStore.__init__N)Ú__name__Ú
__module__r   r   r   r   r   r   r   Q   s   r   c                 c   s²   t  |¡sd V  d S tj}znt ¡ }|d t_d| }t ¡ }d|j|j|f }t	|d|| ƒ d V  W |t_t ¡ | }t	|d|| |ƒ n$|t_t ¡ | }t	|d|| |ƒ 0 d S )Né   z  z%s[%x]%sz%s ENTER %sz%s LEAVE %s - %0.6fs elapsed)
ÚloggerÚisEnabledForÚ_storer   ÚtimeÚ	threadingÚcurrent_threadÚnameÚidentÚ_log)r   r
   Zstart_levelÚstartedÚindentÚthreadÚprefixÚelapsedr   r   r   r   Y   s<    

ûþûr   c                 G   s   t j| |g|¢R Ž  d S )N)r   Úlog)r
   ÚmsgÚargsr   r   r   r   t   s    r   )N)Ú__doc__Ú
contextlibr   r   r   Ztensorboard.utilr   Z
get_loggerr   r   Úlocalr   r   Úcontextmanagerr   r   r   r   r   r   Ú<module>   s   
6
