U
    Jc]                     @   s   U d 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 ddlm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ i ae	eejf ed< deejd
ddZdeeddddZeddddZdeeeeee
e ee
e e
e dd
ddZdS )aH  
Module contains events processing mechanisms that are integrated with the standard python logging.

Example of usage:

::

  from torch.distributed.elastic import events
  event = events.Event(name="test_event", source=events.EventSource.WORKER, metadata={...})
  events.get_logging_handler(destination="console").info(event)

    N)Enum)DictOptional)get_logging_handler   )EventEventMetadataValueEventSource	NodeState	RdzvEvent_events_loggersnull)destinationreturnc                 C   sT   | t krLtd|  }|tjdd d|_t| }|	| |t | < t |  S )a  
    Constructs python logger based on the destination type or extends if provided.
    Available destination could be found in ``handlers.py`` file.
    The constructed logger does not propagate messages to the upper level loggers,
    e.g. root logger. This makes sure that a single event can be processed once.

    Args:
        destination: The string representation of the event handler.
            Available handlers found in ``handlers`` module
    ztorchelastic-events-ZLOGLEVELINFOF)
r   logging	getLoggersetLevelosenvironget	propagater   
addHandler)r   Z_events_loggerZlogging_handler r   M/tmp/pip-unpacked-wheel-gikjz4vx/torch/distributed/elastic/events/__init__.py_get_or_create_logger*   s    
r   )eventr   r   c                 C   s   t ||   d S )Nr   info	serialize)r   r   r   r   r   recordF   s    r    )r   r   c                 C   s   t d|   d S )Ndynamic_rendezvousr   )r   r   r   r   record_rdzv_eventI   s    r"    )
run_idmessage
node_statenamehostnamepidmaster_endpointlocal_idrankr   c	                 C   s   t tdtjrd S |s t }|s,t }t	 }	d}
t
|	dkrd|	d }tj|j}
|sd|j}~	|tjkrzt }nd}t|
 d| | ||||||||d
}t| d S )Nr!   Zno_filer   r#   :)
r'   r$   r%   r(   r)   r&   r*   r,   r+   error_trace)
isinstancer   r   NullHandlersocketgetfqdnr   getpidinspectstacklenpathbasenamefilenamefunctionr
   ZFAILED	traceback
format_excr   r"   )r$   r%   r&   r'   r(   r)   r*   r+   r,   Z	callstackr9   Zstack_depth_1r.   r   r   r   r   construct_and_record_rdzv_eventM   s<    

r=   )r   )r   )r#   r#   Nr#   NN)__doc__r4   r   r   r1   r;   enumr   typingr   r   Z)torch.distributed.elastic.events.handlersr   apir   r   r	   r
   r   r   strLogger__annotations__r   r    r"   intr=   r   r   r   r   <module>	   s>         