U
    ªÊ¹j�&  ã                   @   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ƒ rˆd 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/bwave/python/venv/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
ƒrÎt| j	dƒrÎt| 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ƒ�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
