U
    ªÊ¹jx	  ã                   @   s²   d dl Z d dlZd dlZd dlmZ e j d¡dkrFedƒdd„ ƒZnd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dS )é    N)Ú	lru_cacheZTORCHINDUCTOR_WRITE_MISSING_OPSÚ1c              	   C   s6   t t ¡ › d�dƒ�}| t| ƒd ¡ W 5 Q R X d S )Nz/missing_ops.txtÚaÚ
)ÚopenÚtempfileÚ
gettempdirÚwriteÚstr)ÚtargetÚfd© r   úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/_inductor/exc.pyÚ_record_missing_op   s    r   c                 C   s   d S )Nr   )r   r   r   r   r      s    c                   @   s   e Zd Zedd„ ƒZdS )ÚOperatorIssuec                 C   sD   d| › �gdd„ t |ƒD ƒ }|r2| d|› �¡ t d |¡d¡S )Nztarget: c                 S   s    g | ]\}}d |› d|› �‘qS )zargs[z]: r   )Ú.0ÚiÚargr   r   r   Ú
<listcomp>   s    z.OperatorIssue.operator_str.<locals>.<listcomp>zkwargs: r   z  )Ú	enumerateÚappendÚtextwrapÚindentÚjoin)r   ÚargsÚkwargsÚlinesr   r   r   Úoperator_str   s    ÿzOperatorIssue.operator_strN)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r   r   r   r   r      s   r   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚMissingOperatorWithoutDecompc                    s(   t |ƒ tƒ  d|  |||¡› �¡ d S )Nzmissing lowering
)r   ÚsuperÚ__init__r   ©Úselfr   r   r   ©Ú	__class__r   r   r$      s    z%MissingOperatorWithoutDecomp.__init__©r   r   r    r$   Ú__classcell__r   r   r'   r   r"      s   r"   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚMissingOperatorWithDecompc                    s:   t |ƒ tƒ  d|  |||¡› �t d|› d�¡ ¡ d S )Nzmissing decomposition
z9

                There is a decomposition available for z± in
                torch._decomp.get_decompositions().  Please add this operator to the
                `decompositions` list in torch._inductor.decompositions
                )r   r#   r$   r   r   Údedentr%   r'   r   r   r$   %   s    þÿÿÿz"MissingOperatorWithDecomp.__init__r)   r   r   r'   r   r+   $   s   r+   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚLoweringExceptionc                    s0   t ƒ  t|ƒj› d|› d|  |||¡› �¡ d S )Nz: r   )r#   r$   Útyper   r   )r&   Úexcr   r   r   r'   r   r   r$   5   s    "ÿzLoweringException.__init__r)   r   r   r'   r   r-   4   s   r-   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚInvalidCxxCompilerc                    s.   ddl m} tƒ  d|j› d|jj› �¡ d S )Né   )Úconfigz!No working C++ compiler found in z
.cpp.cxx: )Ú r2   r#   r$   r   ÚcppÚcxx)r&   r2   r'   r   r   r$   <   s    ÿzInvalidCxxCompiler.__init__r)   r   r   r'   r   r0   ;   s   r0   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚCppCompileErrorc                    s>   t |tƒr| d¡}tƒ  t d¡ ¡ jd 	|¡|d�¡ d S )Nzutf-8z©
                    C++ compile error

                    Command:
                    {cmd}

                    Output:
                    {output}
                ú )ÚcmdÚoutput)
Ú
isinstanceÚbytesÚdecoder#   r$   r   r,   ÚstripÚformatr   )r&   r8   r9   r'   r   r   r$   E   s    

ÿ ôÿzCppCompileError.__init__r)   r   r   r'   r   r6   D   s   r6   )Úosr   r   Ú	functoolsr   ÚenvironÚgetr   ÚRuntimeErrorr   r"   r+   r-   r0   r6   r   r   r   r   Ú<module>   s   	