a
    hS\                     @  sR  d dl m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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 erd dlZd d	lmZ dd
lmZ ddlmZ ddddd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&Z0G d'd( d(e&Z1G d)d* d*e1Z2G d+d, d,e&Z3G d-d. d.e3Z4G d/d0 d0e&Z5G d1d2 d2e3Z6G d3d4 d4e3Z7G d5d6 d6e3Z8G d7d8 d8e3Z9G d9d: d:e6Z:G d;d< d<e	Z;G d=d> d>e3Z<G d?d@ d@e&Z=G dAdB dBe3Z>G dCdD dDe&Z?G dEdF dFe&Z@G dGdH dHeAZBG dIdJ dJeAZCG dKdL dLe&ZDG dMdN dNe&ZEG dOdP dPeEZFG dQdR dReEZGG dSdT dTeGZHG dUdV dVeGZIG dWdX dXeEZJG dYdZ dZeEZKG d[d\ d\eEZLG d]d^ d^eEZMG d_d` d`eEZNeOeFePeGeQeHeReJeSeIeTeKe%eLeUeMeVeNi	ZWdadbdcdddeZXdddfdadgdhdidjdkdldmZYdndodpdqdrZZej[j\j]ej[j\j^ej[j\j_ej[j\j`ej[j\jafZbdsdtddjdudvdwZced Zeeeddxddndydjdzd{d|Zfdsdtdddd}djd~ddZgdddd}ddddZheedddddd}dnddjdddZiddodddZjG dd dZkddsdddodddZldsdddddZmddddZnddsdddddZodddddZpddydddZqdddddZrddsdtdydddddZsddsdtdydddddZtdS )    )annotationsN)autoEnum)extract_stack
format_excformat_listStackSummary)AnyNoReturnOptionalTYPE_CHECKING   )config)counters)	CompileId)InstructionTranslatorBase)DynamoFrameTypestr)	case_namereturnc                 C  s   d|  dd S )NzhFor more information about this error, see: https://pytorch.org/docs/main/generated/exportdb/index.html#_-)replacer    r   ?/var/www/auris/lib/python3.9/site-packages/torch/_dynamo/exc.pyexportdb_error_message5   s    
r   Zgraph_breaksc                   @  s   e Zd ZdS )TorchDynamoExceptionN__name__
__module____qualname__r   r   r   r   r   A   s   r   c                   @  s   e Zd ZdS )InternalTorchDynamoErrorNr   r   r   r   r   r"   E   s   r"   c                      s6   e Zd ZU ded< dddddd fdd	Z  ZS )
RestartAnalysisOptional[str]restart_reasonN)r%   r	   None)argsr%   r   c                  s   || _ t j|  d S N)r%   super__init__)selfr%   r'   	__class__r   r   r*   L   s    zRestartAnalysis.__init__r   r    r!   __annotations__r*   __classcell__r   r   r,   r   r#   I   s   
r#   c                   @  s   e Zd ZdS )SpeculationRestartAnalysisNr   r   r   r   r   r1   Q   s   r1   c                   @  s   e Zd ZdS )UnspecializeRestartAnalysisNr   r   r   r   r   r2   U   s   r2   c                   @  s   e Zd ZdS ) CompileCollectiveRestartAnalysisNr   r   r   r   r   r3   Y   s   r3   c                   @  s   e Zd ZdS )TensorifyScalarRestartAnalysisNr   r   r   r   r   r4   ]   s   r4   c                   @  s   e Zd ZdS )	SkipFrameNr   r   r   r   r   r5   a   s   r5   c                   @  s   e Zd ZdS )TorchRuntimeErrorNr   r   r   r   r   r6   e   s   r6   c                      s$   e Zd Zddd fddZ  ZS )InvalidBackendr   r&   namer   c                   s   t  d|d d S )NzInvalid backend: z=, see `torch._dynamo.list_backends()` for available backends.r)   r*   )r+   r9   r,   r   r   r*   j   s    
zInvalidBackend.__init__r   r    r!   r*   r0   r   r   r,   r   r7   i   s   r7   c                      s"   e Zd Zdd fddZ  ZS )ResetRequiredr&   r   c                   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*   q   s
    zResetRequired.__init__r;   r   r   r,   r   r<   p   s   r<   c                      s6   e Zd Zddddd fddZddd	d
Z  ZS )ShortenTracebackr	   Optional[types.FrameType]r&   )r'   first_useful_framekwargsr   c                  s   t  j|i | || _d S r(   )r)   r*   rC   )r+   rC   r'   rD   r,   r   r   r*   }   s    zShortenTraceback.__init__ztyping.Selfr=   c                 C  sP   | j }| jd u s|d u stjr"| S |j| jurF|j}|d us"J dq"| |S )Nz#internal error, please report a bug)__traceback__rC   r   verbosetb_frametb_nextwith_traceback)r+   tbr   r   r   remove_dynamo_frames   s    z%ShortenTraceback.remove_dynamo_frames)r   r    r!   r*   rK   r0   r   r   r,   r   rA   |   s   rA   c                      s(   e Zd Zddddd fddZ  ZS )BackendCompilerFailedr	   	ExceptionrB   r&   )
backend_fninner_exceptionrC   r   c                   sF   t |dd| _|| _d| jdt|j d| }t j||d d S )Nr   ?zbackend=z	 raised:
z: )rC   )getattrbackend_namerO   typer   r)   r*   )r+   rN   rO   rC   msgr,   r   r   r*      s    zBackendCompilerFailed.__init__r;   r   r   r,   r   rL      s   rL   c                      sL   e Zd Zdddddd fddZdd	d
dZddddddZ  ZS )UnsupportedNr   r   r$   r&   )rT   r   r   c                  s8   t  | tjj | _|| _d | _| 	  || _
d S r(   )r)   r*   torchZ_guardsZTracingContextr   
real_stackrT   categoryadd_to_statsr   )r+   rT   r   r,   r   r   r*      s    zUnsupported.__init__r=   c                 C  sL   | j d usJ t| j  | j  d8  < t| j  | j dkrHt| j  | j= d S )Nr   r   rX   r   rT   r@   r   r   r   remove_from_stats   s    zUnsupported.remove_from_statsunimplemented)rX   r   c                 C  s    || _ t| | j  d7  < d S )Nr   rZ   )r+   rX   r   r   r   rY      s    zUnsupported.add_to_stats)r\   )r   r    r!   r*   r[   rY   r0   r   r   r,   r   rU      s   rU   c                   @  s   e Zd ZdS )$UnknownPropertiesDuringBackwardTraceNr   r   r   r   r   r]      s   r]   c                   @  s   e Zd ZdS )RecompileErrorNr   r   r   r   r   r^      s   r^   c                      s$   e Zd Zddd fddZ  ZS )ArgsMismatchErrorr   r&   rT   r   c                   s   t  | d S r(   r:   r+   rT   r,   r   r   r*      s    zArgsMismatchError.__init__r;   r   r   r,   r   r_      s   r_   c                      s$   e Zd Zddd fddZ  ZS )AttributeMutationErrorr   r&   r`   c                   s   t  | d S r(   r:   ra   r,   r   r   r*      s    zAttributeMutationError.__init__r;   r   r   r,   r   rb      s   rb   c                      s$   e Zd Zddd fddZ  ZS )InfiniteGeneratorErrorr   r&   r`   c                   s   t  | d S r(   r:   ra   r,   r   r   r*      s    zInfiniteGeneratorError.__init__r;   r   r   r,   r   rc      s   rc   c                      s$   e Zd Zddd fddZ  ZS )SideEffectsErrorr   r&   r`   c                   s   t  | d S r(   r:   ra   r,   r   r   r*      s    zSideEffectsError.__init__r;   r   r   r,   r   rd      s   rd   c                      s(   e Zd ZdZddd fddZ  ZS )CondOpArgsMismatchErrorz?
    Internal error from cond() due to arguments mismatch.
    r   r&   r`   c                   s   t  | d S r(   r:   ra   r,   r   r   r*      s    z CondOpArgsMismatchError.__init__)r   r    r!   __doc__r*   r0   r   r   r,   r   re      s   re   c                   @  s<   e Zd Ze 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_OUTPUTZ*UNSUPPORTED_ALIASED_MUTATED_DYNAMIC_INPUTSr   r   r   r   rg      s   rg   c                      s*   e Zd Zd	ddddd fddZ  ZS )
	UserErrorNrg   r   r$   r&   )
error_typerT   r   r   c                   sZ   |dur>t |tsJ |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   endswithr   r)   r*   ri   message)r+   ri   rT   r   r,   r   r   r*      s    

zUserError.__init__)Nr;   r   r   r,   r   rh      s    rh   c                   @  s   e Zd ZdS )SkipCodeRecursiveExceptionNr   r   r   r   r   rp      s   rp   c                   @  s   e Zd ZdS )RecompileLimitExceededNr   r   r   r   r   rq      s   rq   c                   @  s   e Zd ZdS )UnsafeScriptObjectErrorNr   r   r   r   r   rr      s   rr   c                   @  s   e Zd ZdS )UncapturedHigherOrderOpErrorNr   r   r   r   r   rs     s   rs   c                   @  s   e Zd ZdS )IncorrectUsageNr   r   r   r   r   rt     s   rt   c                   @  s   e Zd ZdS )FailOnRecompileLimitHitNr   r   r   r   r   ru     s   ru   c                   @  s   e Zd ZdS )PackageErrorNr   r   r   r   r   rv     s   rv   c                   @  s   e Zd ZdS )ObservedExceptionNr   r   r   r   r   rw     s   rw   c                      s0   e Zd ZU ded< dddd fddZ  ZS )ObservedUserStopIterationzOptional[Any]valuer	   r&   )r'   rD   r   c                   s.   t  d t|dkr$|d | _nd | _d S )Nzunhandled `raise StopIteration`r   )r)   r*   lenry   )r+   r'   rD   r,   r   r   r*   !  s    z"ObservedUserStopIteration.__init__r.   r   r   r,   r   rx     s   
rx   c                   @  s   e Zd ZdS )ObservedLookupErrorNr   r   r   r   r   r{   )  s   r{   c                   @  s   e Zd ZdS )ObservedIndexErrorNr   r   r   r   r   r|   .  s   r|   c                   @  s   e Zd ZdS )ObservedKeyErrorNr   r   r   r   r   r}   3  s   r}   c                   @  s   e Zd ZdS )ObservedGeneratorExitNr   r   r   r   r   r~   8  s   r~   c                   @  s   e Zd ZdS )ObservedAttributeErrorNr   r   r   r   r   r   <  s   r   c                   @  s   e Zd ZdS )ObservedRuntimeErrorNr   r   r   r   r   r   A  s   r   c                   @  s   e Zd ZdS )ObservedNotImplementedErrorNr   r   r   r   r   r   F  s   r   c                   @  s   e Zd ZdS )ObservedTypeErrorNr   r   r   r   r   r   J  s   r   ztype[Exception]ztype[ObservedException])exc_typer   c                 C  s:   | t vr2t| dt| }td| dtfi t | < t |  S )Nr   ZObservedError)observed_exception_maprQ   r   rS   rw   )r   r9   r   r   r   get_dynamo_observed_exception\  s    r   )r'   rD   r   zOptional[list[Any]]zOptional[dict[str, Any]]r
   )r   txr'   rD   r   c                C  s>   ddl m} || ||pg |p"i }|j| t|  d S )Nr   )BuiltinVariable)	variablesr   call_functionexn_vt_stackZset_current_exceptionr   )r   r   r'   rD   r   Zexception_vtr   r   r   raise_observed_exceptione  s    r   r	   r&   )r   r   c                 C  s   | j   d S r(   )r   Zclear_current_exception)r   r   r   r   handle_observed_exceptionu  s    r   rM   ztypes.CodeType)ecoderT   r   c                   sN   t | | tjjddd  fddd td  t| t|| d d S )Nartifactc                   S  s
   dddS NZdynamo_graph_break_reasonstring)r9   encodingr   r   r   r   r   <lambda>  s    z,unimplemented_with_warning.<locals>.<lambda>c                     s    S r(   r   r   Zgraph_break_msgr   r   r         Zmetadata_fnZ
payload_fn%s)from_exc)	format_error_msg_verboserV   _loggingtrace_structuredgraph_breaks_logdebuglogwarningr\   )r   r   rT   r   r   r   unimplemented_with_warning  s    



r   )r   r   r$   )rT   r   r   r   c                C  s<   | t jddksJ |tur,t| |d|t| |dd S )NBREAKFr   )osenvironget_NOTHINGrU   )rT   r   r   r   r   r   r\     s    r\   z	list[str])r   r   gb_typecontextexplanationhintsr   c                   sL   t | | tjjddd  fddd td  t||||| dd d S )	Nr   c                   S  s
   dddS r   r   r   r   r   r   r     s    z/unimplemented_v2_with_warning.<locals>.<lambda>c                     s    S r(   r   r   r   r   r   r     r   r   r   Tr   log_warning)r   rV   r   r   r   r   unimplemented_v2)r   r   r   r   r   r   r   r   r   unimplemented_v2_with_warning  s    

r   )r   r   r   r   r   c                 C  sT   t |d }ddd |D }t |d }|  d| d| d| d}|S )N    rl   c                 s  s"   | ]}d t |d  V  qdS )z  Hint: r   N)r>   indentlstrip).0hintr   r   r   	<genexpr>  s   z-format_graph_break_message.<locals>.<genexpr>z
  Explanation: z

  Developer debug context: )r>   r   r   join)r   r   r   r   Z	hints_strrT   r   r   r   format_graph_break_message  s    
r   Fr   bool)r   r   r   r   r   r   r   c                C  s:   t | |||}|rt| |tur.t||t|dS )a  
    Called within dynamo to cause a graph break.
    Args:
        gb_type: Context-free graph break type. It should be a short string without any
                 information specific to the tracing context (i.e. no dynamically-generated strings)
        context: Developer context for the graph break. It can contain tracing context/dynamic strings.
        explanation: User-facing context-dependent explanation for the graph break. Can be dynamic.
        hints: List of user-facing hints for the graph break.
    N)r   r   r   r   rU   )r   r   r   r   r   r   rT   r   r   r   r     s    

r   r`   c                 C  s.   t d |   d7  < | tjddks*J d S )Nwarningsr   r   F)r   r   r   r   )rT   r   r   r   r     s    r   c                   @  s8   e Zd ZdddddZdddd	Zddd
dZdS )KeyErrorMsgr	   r&   )ry   r   c                 C  s
   || _ d S r(   )ry   )r+   ry   r   r   r   r*     s    zKeyErrorMsg.__init__r   r=   c                 C  s
   t | jS r(   )r   ry   r@   r   r   r   __str__  s    zKeyErrorMsg.__str__c                 C  s   |   S r(   )r   r@   r   r   r   __repr__!  s    zKeyErrorMsg.__repr__N)r   r    r!   r*   r   r   r   r   r   r   r     s   r   rl   )excrT   exportr   c                 C  sT  dd l }d | _t| }|d u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dkrdnt| jd }t| tr2t|| 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').
rW   z
Set TORCHDYNAMO_VERBOSE=1 for the internal stack trace (please do this especially if you're reporting a bug to PyTorch). For even more developer context, set TORCH_LOGS="+dynamo"
rO   minifier_pathbuck_commandz
Minifier script written to zW. Run this buck command to find the smallest traced graph which reproduces this error: rl   zQ. Run this script to find the smallest traced graph which reproduces this error.
r   )	tracebackinnermost_user_frame_summaryget_real_stackrz   r   r   r   Zreplay_record_enabledhasattrr   rF   rO   r   r   r'   r   rm   KeyErrorr   )r   rT   r   r   rW   Zold_msgZnew_msgr   r   r   augment_exc_message%  s>    
  r   r   z#tuple[Optional[str], Optional[int]])r   
compile_idr   c                 C  s0   d }d }| j d ur"| j j}| j j}|| _||fS r(   )r   filenamelinenor   )r   r   r   r   r   r   r   get_exc_messageT  s    
r   r   r=   c                   C  s
   t t S r(   )filter_stackr   r   r   r   r   get_stack_above_dynamo`  s    r   zOptional[DynamoFrameType]zOptional[StackSummary])r   framer   c                 C  s<   t | dd }|d u rd S |d ur(t }nt }t|| S )NrW   )rQ   r   r   	from_list)r   r   rW   Zstack_above_dynamor   r   r   r   d  s    r   )stackr   c                 C  sT   t  }| D ]D}|jd u rq
d|jv r( qPd|jv s
|jrDd|jv rDq
|| q
|S )NZconvert_frameZ
eval_frameztorch._dynamo.optimize()r   r   lineappend)r   Z
user_stackr   r   r   r   r     s    


r   r8   c                 C  s0   ddl m} t| d| }|r,|dS d S )Nr   )TORCH_DYNAMO_RESUME_IN_PREFIXz_(\w+)_at_\d+)Zresume_executionr   rematchgroup)r9   r   r   r   r   r   remove_resume_prefix  s
    
r   c                 C  sZ   t  }| D ]J}|jdu rq
t|j}|rJ|rJ|d j|krJ||d< ||_q
|| q
|S )a1  
    When we graph break, we create a resume function and make a regular Python call
    to it, which gets intercepted by Dynamo. This behavior is normally shown in the
    traceback, which can be confusing to a user. So we can filter out resume frames
    for better traceback clarity.

    Example:
    File "..." line 3, in f
        <line 3>
    File "..." line 5, in torch_dynamo_resume_in_f_at_80
        <line 5>
    File "..." line 10, in torch_dynamo_resume_in_f_at_120
        <line 10>

    becomes
    File "..." line 10, in f
        <line 10>
    Nr   )r   r   r   r9   r   )r   	new_stackr   r9   r   r   r   collapse_resume_frames  s    

r   )r   r   r   r   r   c                 C  sp   d|j  d|j d|j d}|d7 }|t 7 }t| |}|d url|d7 }|dt|7 }|d7 }|d7 }|S )	NWON'T CONVERT rk    line rl   z.========== TorchDynamo Stack Trace ==========
zY
========== The above exception occurred while processing the following code ==========

r   z
==========)co_nameco_filenameco_firstlinenor   r   r   r   )r   r   r   r   rT   rW   r   r   r   r     s    

r   c                 C  s8   t jrt| |||S d|j d|j d|j dt  S )Nr   rk   r   z 
due to: 
)r   rF   r   r   r   r   r   )r   r   r   r   r   r   r   format_error_msg  s    r   )rl   F)N)NN)NN)u
__future__r   loggingr   r   r>   typingenumr   r   r   r   r   r   r   r	   r
   r   r   Ztorch._guardsrV   r   r   utilsr   typesr   Zsymbolic_convertr   r   r   	getLoggerr   r   r   ZgetArtifactLoggerr   RuntimeErrorr   r"   r#   r1   r2   r3   r4   r5   r6   r7   r<   rA   rL   rU   r]   r^   r_   rb   rc   rd   re   rg   rh   rp   rq   rr   rs   rM   rt   ru   rv   rw   rx   r{   r|   r}   r~   r   r   r   r   StopIterationLookupError
IndexErrorGeneratorExitr   AttributeErrorNotImplementedError	TypeErrorr   r   r   r   Z_subclassesZfake_tensorZDataDependentOutputExceptionZDynamicOutputShapeExceptionZUnsupportedOperatorExceptionZUnsupportedFakeTensorExceptionZ$UnsupportedMutationAliasingExceptionZ!exceptions_allowed_to_be_fallbackr   objectr   r\   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   
			!/ !	%    