o
    þÏ¯iú  ã                   @   sn   d dl mZmZmZ zd dlmZ d dlmZ dZW n e	y%   dZY nw ede
eeeƒZG dd„ dƒZd	S )
é    )ÚDictÚOptionalÚTypeVar)ÚSimpleEventRecord)ÚTmetryWriterTFÚTc                   @   sš   e Zd ZdZdZdZdZi Zdd„ Zdd„ Z	d	e
d
efdd„Zdee
ef fdd„Zdefdd„Zdeddfdd„Zdefdd„Zddee
 fdd„ZdS )ÚEventLoggerz¼
    Base class for providing event logging in a path handler
    It implements event logging by wrapping the tmetry interface.
    If tmetry packages is not available, it is a no-op.
    Úiopath_tmetryÚopé
   c                 O   s    t rg | _tƒ | _d| _d S d S )NT)Úb_tmetry_availableÚ_writersr   Ú_evtÚ_enabled)ÚselfÚargsÚkwargs© r   úN/home/ubuntu/.local/lib/python3.10/site-packages/iopath/common/event_logger.pyÚ__init__$   s
   
úzEventLogger.__init__c                 C   s&   t rt|tƒr| j |¡ d S d S d S ©N)r   Ú
isinstancer   r   Úappend)r   Úwriterr   r   r   Ú
add_writer/   s
   
þzEventLogger.add_writerÚkeyÚvalc                 C   s   t r| j ||¡ d S d S r   )r   r   Úset)r   r   r   r   r   r   Úadd_key5   s   ÿzEventLogger.add_keyÚkvsc                 C   s   t r
| j |¡ d S d S r   )r   r   Úset_keys)r   r   r   r   r   Úadd_keys:   s   ÿzEventLogger.add_keysÚreturnc                 C   sf   | j  | j¡}|du rdS || jvrd| j|< dS | j|  d7  < | j| | jkr1d| j|< dS dS )zÍ
        Samples the current event and logs only when the count
        reaches logging interval.

        Returns:
            True: if this sample should be logged.
            False: otherwise.
        NTé   F)r   ÚgetÚOP_KEYÚsample_countsÚSAMPLING_PERIOD)r   Úevt_opr   r   r   Ú_sample_record>   s   	


zEventLogger._sample_recordÚenableNc                 C   s
   || _ d S r   ©r   )r   r*   r   r   r   Úset_loggingY   s   
zEventLogger.set_loggingc                 C   s   | j S r   r+   )r   r   r   r   Úis_logging_enabled\   s   zEventLogger.is_logging_enabledÚtopicc                 C   sV   t r'| jr)|  ¡ sd S |d u r| j}| jD ]	}| || j¡ q| `tƒ | _d S d S d S r   )r   r   r)   ÚDEFAULT_TOPICr   ÚwriteRecordr   r   )r   r.   r   r   r   r   Ú	log_event`   s   

ôzEventLogger.log_eventr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r%   r'   r&   r   r   ÚstrÚVTYPEr   r   r!   Úboolr)   r,   r-   r   r1   r   r   r   r   r      s    r   N)Útypingr   r   r   Útmetry.simpleeventr   Útmetry.writerr   r   ÚImportErrorr6   Úintr8   Úfloatr7   r   r   r   r   r   Ú<module>   s   ÿ