U
    zh,                     @   s  d dl Z d dlZd dlmZmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZ d dlZddlmZ ddlmZ dd	 Zd dlZeeZejed
ZG dd deZG dd deZG dd deZ G dd de Z!G dd de Z"G dd deZ#G dd deZ$G dd deZ%G dd deZ&G dd deZ'G dd  d eZ(G d!d" d"eZ)G d#d$ d$e(Z*G d%d& d&e(Z+G d'd( d(e*Z,G d)d* d*eZ-G d+d, d,e(Z.G d-d. d.eZ/G d/d0 d0eZ0G d1d2 d2eZ1G d3d4 d4e2Z3G d5d6 d6eZ4ej5j6j7ej5j6j8ej5j6j9ej5j6j:fZ;e2e<ed7d8d9Z=e> Z?e?d:e<eed;d<d=Z@e<dd>d?d@ZAG dAdB dBZBdQe2e<eCddEdFdGZDdRe2ee	 dHdIdJZEdKdL ZFdSe2e<dHdMdNZGdTe2e<dHdOdPZHdS )U    N)autoEnum)extract_stack
format_excformat_listStackSummary)AnycastNoReturnOptional   )config)countersc                 C   s   d|  dd S )NzhFor more information about this error, see: https://pytorch.org/docs/main/generated/exportdb/index.html#_-)replace)	case_name r   C/var/www/html/venv/lib/python3.8/site-packages/torch/_dynamo/exc.pyexportdb_error_message   s    
r   Zgraph_breaksc                   @   s   e Zd ZdS )TorchDynamoExceptionN__name__
__module____qualname__r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )InternalTorchDynamoErrorNr   r   r   r   r   r   !   s   r   c                       s,   e Zd ZU eed< dd fdd
Z  ZS )RestartAnalysisrestart_reasonN)r   c                   s   || _ t j|  d S N)r   super__init__)selfr   args	__class__r   r   r    (   s    zRestartAnalysis.__init__)r   r   r   str__annotations__r    __classcell__r   r   r#   r   r   %   s   
r   c                   @   s   e Zd ZdS )SpeculationRestartAnalysisNr   r   r   r   r   r(   -   s   r(   c                   @   s   e Zd ZdS )UnspecializeRestartAnalysisNr   r   r   r   r   r)   1   s   r)   c                   @   s   e Zd ZdS )	SkipFrameNr   r   r   r   r   r*   5   s   r*   c                   @   s   e Zd ZdS )TorchRuntimeErrorNr   r   r   r   r   r+   9   s   r+   c                       s   e Zd Z fddZ  ZS )InvalidBackendc                    s   t  d|d d S )NzInvalid backend: z=, see `torch._dynamo.list_backends()` for available backends.r   r    )r!   namer#   r   r   r    >   s    
zInvalidBackend.__init__r   r   r   r    r'   r   r   r#   r   r,   =   s   r,   c                       s   e Zd Z fddZ  ZS )ResetRequiredc                    s   t  td d S )Nz
                Must call `torch._dynamo.reset()` before changing backends.  Detected two calls to
                `torch.compile()` with a different backend compiler arguments.
                )r   r    textwrapdedentr!   r#   r   r   r    E   s
    zResetRequired.__init__r/   r   r   r#   r   r0   D   s   r0   c                       s   e Zd Z fddZ  ZS )BackendCompilerFailedc                    sB   t |dd| _|| _d| jdt|j d| }t | d S )Nr   ?zbackend=z	 raised:
z: )getattrbackend_nameinner_exceptiontyper   r   r    )r!   Z
backend_fnr8   msgr#   r   r   r    Q   s    zBackendCompilerFailed.__init__r/   r   r   r#   r   r4   P   s   r4   c                       s.   e Zd Z fddZdd ZdddZ  ZS )	Unsupportedc                    s2   t  | tjj | _|| _d | _| 	  d S r   )
r   r    torchZ_guardsZTracingContextr   
real_stackr:   categoryadd_to_statsr!   r:   r#   r   r   r    Y   s
    zUnsupported.__init__c                 C   sL   | j d k	stt| j  | j  d8  < t| j  | j dkrHt| j  | j= d S )Nr   r   )r>   AssertionErrorr   r:   r3   r   r   r   remove_from_stats`   s    zUnsupported.remove_from_statsunimplementedc                 C   s    || _ t| | j  d7  < d S )Nr   )r>   r   r:   )r!   r>   r   r   r   r?   f   s    zUnsupported.add_to_stats)rC   )r   r   r   r    rB   r?   r'   r   r   r#   r   r;   X   s   r;   c                   @   s   e Zd ZdS )RecompileErrorNr   r   r   r   r   rD   k   s   rD   c                       s   e Zd Z fddZ  ZS )ArgsMismatchErrorc                    s   t  | d S r   r-   r@   r#   r   r   r    p   s    zArgsMismatchError.__init__r/   r   r   r#   r   rE   o   s   rE   c                       s   e Zd Z fddZ  ZS )AttributeMutationErrorc                    s   t  | d S r   r-   r@   r#   r   r   r    u   s    zAttributeMutationError.__init__r/   r   r   r#   r   rF   t   s   rF   c                       s    e Zd ZdZ fddZ  ZS )CondOpArgsMismatchErrorz?
    Internal error from cond() due to arguments mismatch.
    c                    s   t  | d S r   r-   r@   r#   r   r   r    ~   s    z CondOpArgsMismatchError.__init__)r   r   r   __doc__r    r'   r   r   r#   r   rG   y   s   rG   c                   @   s6   e Zd Ze Ze Ze Ze Ze Ze Z	e Z
dS )UserErrorTypeN)r   r   r   r   ZDYNAMIC_CONTROL_FLOWZANTI_PATTERNZSTANDARD_LIBRARYZCONSTRAINT_VIOLATIONZDYNAMIC_DIMZINVALID_INPUTZINVALID_OUTPUTr   r   r   r   rI      s   rI   c                       s$   e Zd Zded fddZ  ZS )	UserErrorN)
error_typec                    sZ   |dk	r>t |tst|dr*|d7 }n|d7 }|t|7 }t | || _|| _dS )aG  
        Type of errors that would be valid in Eager, but not supported in TorchDynamo.
        The error message should tell user about next actions.

        error_type: Type of user error
        msg: Actionable error message
        case_name: (Optional) Unique name (snake case) for the usage example in exportdb.
        N. 
)	
isinstancer%   rA   endswithr   r   r    rK   message)r!   rK   r:   r   r#   r   r   r       s    	

zUserError.__init__)N)r   r   r   rI   r    r'   r   r   r#   r   rJ      s   rJ   c                       s*   e Zd ZU ee ed<  fddZ  ZS )UserStopIterationvaluec                    s.   t  d t|dkr$|d | _nd | _d S )Nzunhandled `raise StopIteration`r   )r   r    lenrS   )r!   r"   kwargsr#   r   r   r       s    zUserStopIteration.__init__)r   r   r   r   r   r&   r    r'   r   r   r#   r   rR      s   
rR   c                   @   s   e Zd ZdS )UnsafeScriptObjectErrorNr   r   r   r   r   rV      s   rV   c                   @   s   e Zd ZdS )UncapturedHigherOrderOpErrorNr   r   r   r   r   rW      s   rW   c                   @   s   e Zd ZdS )IncorrectUsageNr   r   r   r   r   rX      s   rX   c                   @   s   e Zd ZdS )ObservedExceptionNr   r   r   r   r   rY      s   rY   )er:   returnc                 C   s0   t | |}td| t| t|| d d S )Nz%sfrom_exc)format_error_msg_verbosegraph_breaks_logdebuglogwarningrC   )rZ   coder:   Zgraph_break_msgr   r   r   unimplemented_with_warning   s    

rd   r\   )r:   r]   r[   c                C   s4   | t jddkst|tk	r(t| |t| d S )NBREAKF)osenvirongetrA   _NOTHINGr;   )r:   r]   r   r   r   rC      s    
rC   )r:   r[   c                 C   s.   t d |   d7  < | tjddks*td S )Nwarningsr   re   F)r   rf   rg   rh   rA   )r:   r   r   r   rb      s    rb   c                   @   s*   e Zd Zdd Zdd ZedddZdS )	KeyErrorMsgc                 C   s
   || _ d S r   )rS   )r!   rS   r   r   r   r       s    zKeyErrorMsg.__init__c                 C   s
   t | jS r   )r%   rS   r3   r   r   r   __str__   s    zKeyErrorMsg.__str__)r[   c                 C   s   |   S r   )rl   r3   r   r   r   __repr__   s    zKeyErrorMsg.__repr__N)r   r   r   r    rl   r%   rm   r   r   r   r   rk      s   rk   rN   F)excr:   exportr[   c                 C   sh  dd l }d | _t| }|d k	rNt|dkrN|d | _|dd|| 7 }tjrxt| drx|d| j	 d| j	 d7 }tj
st| d	r|d
7 }t| drt| jdrt| jdr|d| jj d| jj d7 }n|d| jj d7 }tjs|s|d7 }t| jdkrdnt| jd }t| trFt|| f| jdd   | _n|| }|f| jdd   | _d S )Nr   z
from user code:
  record_filenamez!
Last frame execution written to zD. To run only this frame while debugging, run torch._dynamo.replay('z').
r=   zI
Set TORCH_LOGS="+dynamo" and TORCHDYNAMO_VERBOSE=1 for more information
r8   minifier_pathbuck_commandz
Minifier script written to zW. Run this buck command to find the smallest traced graph which reproduces this error: rN   zQ. Run this script to find the smallest traced graph which reproduces this error.
z

You can suppress this exception and fall back to eager by setting:
    import torch._dynamo
    torch._dynamo.config.suppress_errors = True
r   )	tracebackZinnermost_user_frame_summaryget_real_stackrT   joinr   r   Zreplay_record_enabledhasattrrr   verboser8   rs   rt   Zsuppress_errorsr"   r%   rO   KeyErrorrk   )rn   r:   ro   ru   r=   Zold_msgZnew_msgr   r   r   augment_exc_message   s<    
 
" r{   )rn   r[   c                 C   s<   t | dd }|d krd S g }|d k	r.tt }tt|| S )Nr=   )r6   filter_stackr   r	   r   )rn   framer=   Zstack_above_dynamor   r   r   rv   #  s    
rv   c                 C   s@   g }| D ]2}d|j kr q<d|j ksd|jkr0q|| q|S )NZconvert_frameZ
eval_frameztorch._dynamo.optimize()filenamelineappend)stackZ
user_stackr}   r   r   r   r|   A  s    
r|   c                 C   sp   d|j  d|j d|j d}|d7 }|t 7 }t| |}|d k	rl|d7 }|dt|7 }|d7 }|d7 }|S )	NWON'T CONVERT rM    line rN   z.========== TorchDynamo Stack Trace ==========
zY
========== The above exception occurred while processing the following code ==========

rq   z
==========)co_nameco_filenameco_firstlinenor   rv   rw   r   )rn   rc   rr   r}   r:   r=   r   r   r   r^   M  s    

r^   c                 C   sH   t jd }tjr t| |||}n$d|j d|j d|j dt  }|S )N   r   rM   r   z 
due to: 
)	rf   linesepr   ry   r^   r   r   r   r   )rn   rc   rr   r}   r:   r   r   r   format_error_msge  s    
r   )rN   F)N)NN)NN)Irf   r1   enumr   r   ru   r   r   r   r   typingr   r	   r
   r   Ztorch._guardsr<   rq   r   utilsr   r   logging	getLoggerr   ra   Z_loggingZgetArtifactLoggerr_   RuntimeErrorr   r   r   r(   r)   r*   r+   r,   r0   r4   r;   rD   rE   rF   rG   rI   rJ   rR   rV   rW   	ExceptionrX   rY   Z_subclassesZfake_tensorZDataDependentOutputExceptionZDynamicOutputShapeExceptionZUnsupportedOperatorExceptionZUnsupportedFakeTensorExceptionZ!exceptions_allowed_to_be_fallbackr%   rd   objectri   rC   rb   rk   boolr{   rv   r|   r^   r   r   r   r   r   <module>   sj   
	
1   