U
    Jc                     @   s^   d dl mZmZmZ d dlZeeejf ZeedddZ	ee
dddZG d	d
 d
eZdS )    )DictTupleAnyN)excreturnc                 C   s   | t | jfS N)tb
extract_tb__traceback__)r    r   K/tmp/pip-unpacked-wheel-gikjz4vx/torch/distributed/_shard/checkpoint/api.py_wrap_exception   s    r   )objr   c                 C   s<   t | tsdS t| dkrdS t | d to:t | d tjS )NF   r      )
isinstancetuplelenBaseExceptionr   StackSummary)r   r   r   r   _is_wrapped_exception	   s
    
r   c                       sR   e Zd ZdZeeeef d fddZe	eeef dddZ
dd	 Z  ZS )
CheckpointExceptionzX
    Exception raised if failure was detected as part of a checkpoint load or save.
    )msgfailuresc                    s   t  || || _d S r   )super__init__	_failures)selfr   r   	__class__r   r   r      s    zCheckpointException.__init__)r   c                 C   s   | j S )z
        Returns:
            Dict of failed nodes and their associated exception.
              Keys are node ranks and values are exceptions
        )r   )r   r   r   r   r      s    zCheckpointException.failuresc                 C   sz   d| j   d}| j  D ]X\}}|\}}|d| d7 }|d k	rX|dt|7 }|dtjt||d7 }q|S )NzCheckpointException ranks:
z)Traceback (most recent call last): (RANK z)
 )value)r   keysitemsjoinr   format_listformat_exception_onlytype)r   strZrankZexc_pairr   tracer   r   r   __str__!   s    zCheckpointException.__str__)__name__
__module____qualname____doc__r)   r   intWRAPPED_EXCEPTIONr   propertyr   r+   __classcell__r   r   r   r   r      s
   r   )typingr   r   r   	tracebackr   r   r   r1   r   boolr   r   r   r   r   r   <module>   s
   