U
    9%e&                     @   sD  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 d dlZddlmZ ddlmZ ddlmZ e rd d	lmZ n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.ej/j0j1ej/j0j2ej/j0j3ej/j0j4fZ5d-d. Z6e7d/d0d1Z8e7d/d2d3Z9G d4d5 d5Z:dCd8d9Z;dDee	 d:d;d<Z<d=d> Z=dEd?d@Z>dFdAdBZ?dS )G    N)autoEnum)extract_stack
format_excformat_listStackSummary)castOptional   )config)	is_fbcode)counters)exportdb_error_messagec                 C   s   dS )N  )	case_namer   r   P/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/_dynamo/exc.pyr      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dS )RestartAnalysisNr   r   r   r   r   r   $   s   r   c                   @   s   e Zd ZdS )	SkipFrameNr   r   r   r   r   r   (   s   r   c                   @   s   e Zd ZdS )TorchRuntimeErrorNr   r   r   r   r   r   ,   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.super__init__)selfname	__class__r   r   r   1   s    
zInvalidBackend.__init__r   r   r   r   __classcell__r   r   r"   r   r   0   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   8   s
    zResetRequired.__init__r$   r   r   r"   r   r&   7   s   r&   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_fnr.   msgr"   r   r   r   D   s    zBackendCompilerFailed.__init__r$   r   r   r"   r   r*   C   s   r*   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 N)
r   r   torchZ_guardsZTracingContextr   
real_stackr0   categoryadd_to_statsr    r0   r"   r   r   r   L   s
    zUnsupported.__init__c                 C   s>   t | j | j  d8  < t | j | j dkr:t | j | j= d S )Nr
   r   )r   r5   r0   r)   r   r   r   remove_from_statsS   s    zUnsupported.remove_from_statsunimplementedc                 C   s    || _ t| | j  d7  < d S )Nr
   )r5   r   r0   )r    r5   r   r   r   r6   X   s    zUnsupported.add_to_stats)r9   )r   r   r   r   r8   r6   r%   r   r   r"   r   r1   K   s   r1   c                   @   s   e Zd ZdS )RecompileErrorNr   r   r   r   r   r:   ]   s   r:   c                       s   e Zd Z fddZ  ZS )ArgsMismatchErrorc                    s   t  | d S r2   r   r7   r"   r   r   r   b   s    zArgsMismatchError.__init__r$   r   r   r"   r   r;   a   s   r;   c                       s   e Zd Z fddZ  ZS )AttributeMutationErrorc                    s   t  | d S r2   r   r7   r"   r   r   r   g   s    zAttributeMutationError.__init__r$   r   r   r"   r   r<   f   s   r<   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 r2   r   r7   r"   r   r   r   p   s    z CondOpArgsMismatchError.__init__)r   r   r   __doc__r   r%   r   r   r"   r   r=   k   s   r=   c                   @   s0   e Zd 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CONSTRAIN_VIOLATIONZDYNAMIC_DIMZINVALID_INPUTr   r   r   r   r?   t   s   r?   c                       s$   e Zd Zded fddZ  ZS )	UserErrorN)
error_typec                    s>   |dk	r"t |tst|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)
isinstancestrAssertionErrorr   r   r   rA   message)r    rA   r0   r   r"   r   r   r   ~   s    	zUserError.__init__)N)r   r   r   r?   r   r%   r   r   r"   r   r@   }   s   r@   c                   @   s   e Zd ZdS )IncorrectUsageNr   r   r   r   r   rF      s   rF   c                 C   s.   t | |}td| t| t|| d S )Nz%s)format_error_msg_verbosegraph_breaks_logdebuglogwarningr9   )ecoder0   Zgraph_break_msgr   r   r   unimplemented_with_warning   s    

rN   r0   c                 C   s"   | t jddkstt| d S )NBREAKF)osenvirongetrD   r1   rO   r   r   r   r9      s    r9   c                 C   s.   t d |   d7  < | tjddks*td S )Nwarningsr
   rP   F)r   rQ   rR   rS   rD   rO   r   r   r   rK      s    rK   c                   @   s*   e Zd Zdd Zdd ZedddZdS )	KeyErrorMsgc                 C   s
   || _ d S r2   )value)r    rV   r   r   r   r      s    zKeyErrorMsg.__init__c                 C   s
   t | jS r2   )rC   rV   r)   r   r   r   __str__   s    zKeyErrorMsg.__str__returnc                 C   s   |   S r2   )rW   r)   r   r   r   __repr__   s    zKeyErrorMsg.__repr__N)r   r   r   r   rW   rC   rZ   r   r   r   r   rU      s   rU   
Fc                 C   sN  dd l }t| }|d k	r6|dd|t|  7 }tjr`t| dr`|d| j d| j d7 }tjsxt| drx|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rdnt| jd }t| tr,t|| f| jdd   | _n|| }|f| jdd   | _d S )Nr   z
from user code:
 r   record_filenamez!
Last frame execution written to zD. To run only this frame while debugging, run torch._dynamo.replay('z').
r4   zI
Set TORCH_LOGS="+dynamo" and TORCHDYNAMO_VERBOSE=1 for more information
r.   minifier_pathbuck_commandz
Minifier script written to zW. Run this buck command to find the smallest traced graph which reproduces this error: r[   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
   )	tracebackget_real_stackjoinr   r   Zreplay_record_enabledhasattrr\   verboser.   r]   r^   Zsuppress_errorslenargsrC   rB   KeyErrorrU   )excr0   Zexportr_   r4   Zold_msgZnew_msgr   r   r   augment_exc_message   s<     
  rh   rX   c                 C   s<   t | dd }|d krd S g }|d k	r.tt }tt|| S )Nr4   )r,   filter_stackr   r   r   )rg   framer4   Zstack_above_dynamor   r   r   r`      s    
r`   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_stackrj   r   r   r   ri     s    
ri   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   line r[   z.========== TorchDynamo Stack Trace ==========
zY
========== The above exception occurred while processing the following code ==========

r   z
==========)co_nameco_filenameco_firstlinenor   r`   ra   r   )rg   rM   r\   rj   r0   r4   r   r   r   rG     s    

rG   c              
   C   sL   t jd }tjr t| |||}n(d|j d|j d|j dtdd }|S )N   ro   rp   rq   z 
due to: 
)limit)	rQ   linesepr   rc   rG   rr   rs   rt   r   )rg   rM   r\   rj   r0   r   r   r   format_error_msg1  s    
ry   )r[   F)N)NN)NN)@rQ   r'   enumr   r   r_   r   r   r   r   typingr   r	   Ztorch._guardsr3   r   r   r   utilsr   Ztorch.fb.exportdb.loggingr   logging	getLoggerr   rJ   Z_loggingZgetArtifactLoggerrH   RuntimeErrorr   r   r   r   r   r   r&   r*   r1   r:   r;   r<   r=   r?   r@   	ExceptionrF   Z_subclassesZfake_tensorZDataDependentOutputExceptionZDynamicOutputShapeExceptionZUnsupportedOperatorExceptionZUnsupportedFakeTensorExceptionZ!exceptions_allowed_to_be_fallbackrN   rC   r9   rK   rU   rh   r`   ri   rG   ry   r   r   r   r   <module>   sX   
		
0
