U
    †µ“e`$  ã                   @   sð  d dl mZ zd dlmZ W n ek
r8   eefZY nX d dlZd dl	m
Z
 zd dlmZ W n$ ek
r‚   G dd„ deƒZY nX eƒ Zdd	lmZ d
dlmZ d
dlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zdd„ Z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!dGd&d'„Z"d(d)„ Z#dHd*d+„Z$d,d-„ Z%d
Z&d.d/„ Z'd0d1„ Z(dId2d3„Z)dJd4d5„Z*dKd6d7„Z+d8d9„ Z,dLd;d<„Z-d=d>„ Z.e
dMd?d@„ƒZ/dAdB„ Z0dCdD„ Z1dEdF„ Z2dS )Né    )Úabsolute_import)Ú
basestringN)Úcontextmanager)Úlocalc                   @   s   e Zd ZdS )Ú_threadlocalN©Ú__name__Ú
__module__Ú__qualname__© r   r   ú:/tmp/pip-unpacked-wheel-7k3cqui1/Cython/Compiler/Errors.pyr      s    r   é   )Úopen_new_fileé   )Ú
DebugFlags)ÚOptionsc                   @   s   e Zd ZdS )Ú
PyrexErrorNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ÚPyrexWarningNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ÚCannotSpecializeNr   r   r   r   r   r   "   s   r   c                 C   sŽ   | d }t |tƒrtd| ƒ‚z| ¡ }W n tk
rB   d}Y n:X d |td| d d ƒ| d … ¡}d|d| d	  f }d
d|df }|S )Nr   zOPlease replace filename strings with Scanning.FileSourceDescriptor instances %rz[unprintable code]
Ú r   é   z
...
%s%s^
ú r   z%s
%s%s
z<------------------------------------------------------------)Ú
isinstanceÚany_string_typeÚAssertionErrorÚ	get_linesÚUnicodeDecodeErrorÚjoinÚmax)ÚpositionÚsourceÚFÚsr   r   r   Úcontext%   s    ÿ
$r#   c                 C   s&   | r"d| d   ¡ | d | d f S dS )Nz
%s:%d:%d: r   r   r   r   )Zget_error_description)r   r   r   r   Úformat_position4   s     ÿr$   c                 C   s*   |r&t |ƒ}t|ƒ}d||| p df } | S )Nz%
Error compiling Cython file:
%s
%s%sr   )r$   r#   )Úmessager   Zpos_strZcontr   r   r   Úformat_error:   s
    r&   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚCompileErrorNr   c                 C   s:   || _ || _t||ƒ| _d| _t | | j¡ ||f| _d S )NF)r   Úmessage_onlyr&   Úformatted_messageÚreportedÚ	ExceptionÚ__init__Úargs©Úselfr   r%   r   r   r   r,   C   s    zCompileError.__init__c                 C   s   | j S ©N)r)   )r/   r   r   r   Ú__str__M   s    zCompileError.__str__)Nr   )r   r	   r
   r,   r1   r   r   r   r   r'   A   s   

r'   c                   @   s   e Zd Zddd„ZdS )ÚCompileWarningNr   c                 C   s   || _ t | t|ƒ| ¡ d S r0   )r   r+   r,   r$   r.   r   r   r   r,   R   s    zCompileWarning.__init__)Nr   ©r   r	   r
   r,   r   r   r   r   r2   P   s   r2   c                   @   s   e Zd Zdd„ ZdS )ÚInternalErrorc                 C   s   || _ t | d| ¡ d S )NzInternal compiler error: %s©r(   r+   r,   ©r/   r%   r   r   r   r,   Y   s    ÿzInternalError.__init__Nr3   r   r   r   r   r4   V   s   r4   c                   @   s   e Zd Zdd„ ZdS )Ú
AbortErrorc                 C   s   || _ t | d| ¡ d S )NzAbort error: %sr5   r6   r   r   r   r,   a   s    zAbortError.__init__Nr3   r   r   r   r   r7   ^   s   r7   c                   @   s   e Zd Zddd„ZdS )ÚCompilerCrashNc                 C   s’   |rd| }nd}|| _ |r(d||f }|rLdd l}|dd | |¡¡ 7 }|rp|s\|d7 }|d|jj|f 7 }t | ||¡ |||||f| _d S )NÚ
zCompiler crash in %s%sr   z/

Compiler crash traceback from this point on:
r   z%s: %s)	r(   Ú	tracebackr   Ú	format_tbÚ	__class__r   r'   r,   r-   )r/   Úposr#   r%   ÚcauseZ
stacktracer:   r   r   r   r,   g   s&    
ÿÿzCompilerCrash.__init__)Nr3   r   r   r   r   r8   e   s   r8   c                   @   s   e Zd ZdZdS )ÚNoElementTreeInstalledExceptionzcraised when the user enabled options.gdb_debug but no ElementTree
    implementation was found
    N)r   r	   r
   Ú__doc__r   r   r   r   r?   }   s   r?   Tc                 C   s8   | d k	rt | ƒt_nd t_|r(tjt_nd t_dt_d S ©Nr   )r   ÚthreadlocalÚcython_errors_listing_fileÚsysÚstderrÚcython_errors_echo_fileÚcython_errors_count)ÚpathZecho_to_stderrr   r   r   Úopen_listing_file‚   s    
rI   c                   C   s   t jrt j ¡  d t _d S r0   )rB   rC   Úcloser   r   r   r   Úclose_listing_file   s    
rK   c              	   C   s  t j}|r|r|d  | ¡ nî| jr(d S d| _zd|  }W n2 tk
rl   tt| ddƒt| dd ƒƒd }Y nX t j}|r®z| |¡ W n& tk
r¬   | | 	dd	¡¡ Y nX t j
}|rîz| |¡ W n& tk
rì   | | 	dd	¡¡ Y nX t  jd
7  _tjrtdƒ‚d S )NéÿÿÿÿTz%s
r(   z[unprintable exception message]r   r9   ÚASCIIÚreplacer   zfatal errors)rB   Úcython_errors_stackÚappendr*   ÚUnicodeEncodeErrorr&   ÚgetattrrC   ÚwriteÚencoderF   rG   r   Z	fast_failr7   )ÚerrZ	use_stackZerror_stackÚlineÚlisting_fileÚ	echo_filer   r   r   Úreport_error”   s:      
ÿÿ
  rY   c                 C   s4   | d krt |ƒ‚t| |ƒ}tjr(t|ƒ‚t|ƒ |S r0   )r4   r'   r   Zdebug_exception_on_errorr+   rY   )r   r%   rU   r   r   r   Úerror¯   s    
 rZ   c              	   C   s:   z|   |¡ W n& tk
r4   |   | dd¡¡ Y nX d S )NÚasciirN   )rS   rQ   rT   )ÚfilerV   r   r   r   Ú_write_file_encode»   s    r]   c                 C   sL   |j d sd S t| |ƒ}d| }tj}|r4t||ƒ tj}|rHt||ƒ |S )NZshow_performance_hintszperformance hint: %s
)Z
directivesr2   rB   rC   r]   rF   )r   r%   ÚenvÚwarnrV   rW   rX   r   r   r   Úperformance_hintÂ   s    



r`   c                 C   sJ   |t k rd S t| |ƒ}d| }tj}|r2t||ƒ tj}|rFt||ƒ |S )Nz	note: %s
)ÚLEVELr2   rB   rC   r]   rF   ©r   r%   Úlevelr_   rV   rW   rX   r   r   r   r%   Ð   s    


r%   c                 C   s^   |t k rd S tjr | r t| |ƒS t| |ƒ}d| }tj}|rFt||ƒ tj}|rZt||ƒ |S ©Nzwarning: %s
)	ra   r   Zwarning_errorsrZ   r2   rB   rC   r]   rF   rb   r   r   r   ÚwarningÞ   s    




re   c                 C   sf   |t k rd S tj}||krd S t| |ƒ}d| }tj}|rDt||ƒ tj}|rXt||ƒ | |¡ |S rd   )ra   rB   Úcython_errors_warn_once_seenr2   rC   r]   rF   Úadd)r   r%   rc   Zwarn_once_seenr_   rV   rW   rX   r   r   r   Ú	warn_onceî   s    



rh   c                  C   s   g } t j | ¡ | S r0   )rB   rO   rP   )Úerrorsr   r   r   Úhold_errors  s    rj   Fc                 C   s$   t j ¡ }| s |D ]}t|ƒ qd S r0   )rB   rO   ÚpoprY   )ÚignoreÚheld_errorsrU   r   r   r   Úrelease_errors  s    
rn   c                   C   s
   t jd S )NrL   )rB   rO   r   r   r   r   rm     s    rm   c              	   c   s"   t ƒ }z
|V  W 5 t| d X d S )N)rl   )rj   rn   )rl   ri   r   r   r   Úlocal_errors  s    
ro   c                   C   s$   dt _d t _d t _tƒ t _g t _d S rA   )rB   rG   rC   rF   Úsetrf   rO   r   r   r   r   Úinit_thread   s
    rq   c                   C   s   t j ¡  t jd d …= d S r0   )rB   rf   ÚclearrO   r   r   r   r   Úreset'  s    
rs   c                   C   s   t jS r0   )rB   rG   r   r   r   r   Úget_errors_count+  s    rt   )T)T)r   )r   )r   )F)F)3Ú
__future__r   Ú__builtin__r   r   ÚImportErrorÚbytesÚstrrD   Ú
contextlibr   Ú	threadingr   r   ÚobjectrB   ZUtilsr   r   r   r   r+   r   r   r   r#   r$   r&   r'   r2   r4   r7   r8   r?   rI   rK   rY   rZ   ra   r]   r`   r%   re   rh   rj   rn   rm   ro   rq   rs   rt   r   r   r   r   Ú<module>   sX   







