U
    {±Ëh¿#  ã                   @   s¼  e efZd dlZd dlmZ zd dlmZ W n" e	k
rN   G dd„ dƒ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dEd$d%„Zd&d'„ ZdFd(d)„Zd*d+„ Z dZ!d,d-„ Z"d.d/„ Z#dGd0d1„Z$dHd2d3„Z%dId4d5„Z&d6d7„ Z'dJd9d:„Z(d;d<„ Z)edKd=d>„ƒZ*d?d@„ Z+dAdB„ Z,dCdD„ Z-dS )Lé    N)Úcontextmanager)Úlocalc                   @   s   e Zd ZdS )Ú_threadlocalN©Ú__name__Ú
__module__Ú__qualname__© r	   r	   ú:/tmp/pip-unpacked-wheel-fhl22ezh/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_position/   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_error5   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*   >   s    zCompileError.__init__c                 C   s   | j S ©N)r'   )r-   r	   r	   r
   Ú__str__H   s    zCompileError.__str__)Nr   )r   r   r   r*   r/   r	   r	   r	   r
   r%   <   s   

r%   c                   @   s   e Zd Zddd„ZdS )ÚCompileWarningNr   c                 C   s   || _ t | t|ƒ| ¡ d S r.   )r   r)   r*   r"   r,   r	   r	   r
   r*   M   s    zCompileWarning.__init__)Nr   ©r   r   r   r*   r	   r	   r	   r
   r0   K   s   r0   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*   T   s    ÿzInternalError.__init__Nr1   r	   r	   r	   r
   r2   Q   s   r2   c                   @   s   e Zd Zdd„ ZdS )Ú
AbortErrorc                 C   s   || _ t | d| ¡ d S )NzAbort error: %sr3   r4   r	   r	   r
   r*   \   s    zAbortError.__init__Nr1   r	   r	   r	   r
   r5   Y   s   r5   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
stacktracer8   r	   r	   r
   r*   b   s&    
ÿÿzCompilerCrash.__init__)Nr1   r	   r	   r	   r
   r6   `   s   r6   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=   x   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    
rG   c                   C   s   t jrt j ¡  d t _d S r.   )r@   rA   Úcloser	   r	   r	   r
   Úclose_listing_fileŠ   s    
rI   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   r7   ÚASCIIÚreplacer   zfatal errors)r@   Úcython_errors_stackÚappendr(   ÚUnicodeEncodeErrorr$   ÚgetattrrA   ÚwriteÚencoderD   rE   r   Z	fast_failr5   )ÚerrZ	use_stackZerror_stackÚlineÚlisting_fileÚ	echo_filer	   r	   r
   Úreport_error   s:      
ÿÿ
  rW   c                 C   s4   | d krt |ƒ‚t| |ƒ}tjr(t|ƒ‚t|ƒ |S r.   )r2   r%   r   Zdebug_exception_on_errorr)   rW   )r   r#   rS   r	   r	   r
   Úerrorª   s    
 rX   c              	   C   s:   z|   |¡ W n& tk
r4   |   | dd¡¡ Y nX d S )NÚasciirL   )rQ   rO   rR   )ÚfilerT   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
directivesr0   r@   rA   r[   rD   )r   r#   ÚenvÚwarnrT   rU   rV   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
)ÚLEVELr0   r@   rA   r[   rD   ©r   r#   Úlevelr]   rT   rU   rV   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
)	r_   r   Zwarning_errorsrX   r0   r@   rA   r[   rD   r`   r	   r	   r
   ÚwarningÙ   s    




rc   c                 C   sf   |t k rd S tj}||krd S t| |ƒ}d| }tj}|rDt||ƒ tj}|rXt||ƒ | |¡ |S rb   )r_   r@   Úcython_errors_warn_once_seenr0   rA   r[   rD   Úadd)r   r#   ra   Zwarn_once_seenr]   rT   rU   rV   r	   r	   r
   Ú	warn_onceé   s    



rf   c                  C   s   g } t j | ¡ | S r.   )r@   rM   rN   )Úerrorsr	   r	   r
   Úhold_errorsý   s    rh   Fc                 C   s$   t j ¡ }| s |D ]}t|ƒ qd S r.   )r@   rM   ÚpoprW   )ÚignoreÚheld_errorsrS   r	   r	   r
   Úrelease_errors  s    
rl   c                   C   s
   t jd S )NrJ   )r@   rM   r	   r	   r	   r
   rk   
  s    rk   c              	   c   s"   t ƒ }z
|V  W 5 t| d X d S )N)rj   )rh   rl   )rj   rg   r	   r	   r
   Úlocal_errors  s    
rm   c                   C   s$   dt _d t _d t _tƒ t _g t _d S r?   )r@   rE   rA   rD   Úsetrd   rM   r	   r	   r	   r
   Úinit_thread  s
    ro   c                   C   s   t j ¡  t jd d …= d S r.   )r@   rd   ÚclearrM   r	   r	   r	   r
   Úreset"  s    
rq   c                   C   s   t jS r.   )r@   rE   r	   r	   r	   r
   Úget_errors_count&  s    rr   )T)T)r   )r   )r   )F)F).ÚbytesÚstrr   rB   Ú
contextlibr   Ú	threadingr   r   ÚImportErrorr@   ZUtilsr   r   r   r   r)   r   r   r   r!   r"   r$   r%   r0   r2   r5   r6   r=   rG   rI   rW   rX   r_   r[   r^   r#   rc   rf   rh   rl   rk   rm   ro   rq   rr   r	   r	   r	   r
   Ú<module>   sP   







