U
    ?h                     @   s,  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZG dd deZG d d! d!ejZ G d"d# d#ejZ!G d$d% d%ejZ"e#d&kr(e$  dS )'    N)compile_isolated)jit)types)TypingError)_header_lead)TestCasec                   C   s   d S N r	   r	   r	   N/var/www/html/venv/lib/python3.8/site-packages/numba/tests/test_typingerror.pywhat   s    r   c                   C   s   t  S r   )r   r	   r	   r	   r
   foo   s    r   c                 C   s   | j S r   axr	   r	   r
   bar   s    r   c                 C   s
   | j d S )N   )shaper   r	   r	   r
   	issue_868   s    r   c                 C   s   | dkrdS dS d S )Nr   r	                 ?r	   r   r	   r	   r
   impossible_return_type   s    r   c                   C   s
   t dS N   )mathhypotr	   r	   r	   r
   bad_hypot_usage#   s    r   c                  C   s   g } t | S r   )len)lr	   r	   r
   imprecise_list&   s    r   c                  C   s   t g } | t jS r   )nparrayastypeint32r   r	   r	   r
   using_imprecise_list*   s    
r#   c                   C   s
   t dS )Nr   )Znumpyzr"   r	   r	   r	   r
   unknown_module.   s    r$   c                 C   s   d S r   r	   )r   yzr	   r	   r
   nop1   s    r'   c                  C   s   t jdt jd} d| d< | S )Nr   dtyper   r   )r   emptyfloat64)Zarrr	   r	   r
   array_setitem_invalid_cast4   s    r,   c                   @   s   e Zd Zdd ZdS )Fooc                 C   s   dS )Nz<Foo instance>r	   )selfr	   r	   r
   __repr__;   s    zFoo.__repr__N)__name__
__module____qualname__r/   r	   r	   r	   r
   r-   :   s   r-   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestTypingErrorc              
   C   sP   zt td W n2 tk
r@ } z| dt| W 5 d }~X Y nX | d d S )Nr	   zUntyped global name 'what'Should raise error)r   r   r   assertInstrfailr.   er	   r	   r
   test_unknown_functionA   s
    "z%TestTypingError.test_unknown_functionc              
   C   sT   zt ttjf W n2 tk
rD } z| dt| W 5 d }~X Y nX | d d S )Nz#Unknown attribute 'a' of type int32r4   )r   r   r   r"   r   r5   r6   r7   r8   r	   r	   r
   test_unknown_attrsI   s
    "z"TestTypingError.test_unknown_attrsc              	   C   s6   |  t}ttd W 5 Q R X | dt|j d S )Nr	   zname 'numpyz' is not defined)assertRaisesr   r   r$   r5   r6   	exception)r.   raisesr	   r	   r
   test_unknown_moduleQ   s    z#TestTypingError.test_unknown_modulec              	   C   sr   |  t}ttttjddf W 5 Q R X td t	tj
td}| |t	|j | dt	|j dS )z
        Summary: multiplying a scalar by a non-scalar would cause a crash in
        type inference because TimeDeltaMixOp always assumed at least one of
        its operands was an NPTimeDelta in its generic() method.
        r   CzX Function(<built-in function mul>) found for signature:
 
 >>> mul(UniTuple({} x 1), {})r   zDuring: typing ofN)r<   r   r   r   r   ZArrayr"   r   formatr6   ZintpZIntegerLiteralr5   r=   )r.   r>   expectedr	   r	   r
   test_issue_868W   s    " zTestTypingError.test_issue_868c              	   C   s>   |  t}tttjf W 5 Q R X d}| |t|j d S )NzECan't unify return type from the following types: Tuple(), complex128)	r<   r   r   r   r   r"   r5   r6   r=   )r.   r>   msgr	   r	   r
   test_return_type_unificationf   s    z,TestTypingError.test_return_type_unificationc              	   C   sx   |  t}ttd W 5 Q R X t|j}| d| dd | D }| t	
d|d  | t	
d|d  d S )	Nr	   z  * (float64, float64) -> float64c                 S   s   g | ]}d |kr|qS zDuring:r	   .0r   r	   r	   r
   
<listcomp>w   s      z8TestTypingError.test_bad_hypot_usage.<locals>.<listcomp>z0.*During: resolving callee type: Function.*hypotr   ..*During: typing of call .*test_typingerror.pyr   )r<   r   r   r   r6   r=   r5   
splitlines
assertTrueresearch)r.   r>   errmsg	ctx_linesr	   r	   r
   test_bad_hypot_usagem   s    
z$TestTypingError.test_bad_hypot_usagec              	   C   sJ   |  t}ttd W 5 Q R X t|j}d}| || | d| dS )z|
        Type inference should catch that a list type's remain imprecise,
        instead of letting lowering fail.
        r	   zKCannot infer the type of variable 'l', have imprecise type: list(undefined)z&For Numba to be able to compile a listN)r<   r   r   r   r6   r=   r5   )r.   r>   rO   rD   r	   r	   r
   test_imprecise_list~   s    
z#TestTypingError.test_imprecise_listc              	   C   s:   |  t}ttd W 5 Q R X t|j}| d| dS )zh
        Type inference should report informative error about untyped list.
        TODO: #2931
        r	   zUndecided typeN)r<   r   r   r#   r6   r=   r5   r.   r>   rO   r	   r	   r
   test_using_imprecise_list   s    
z)TestTypingError.test_using_imprecise_listc              	   C   sR   |  t}ttd W 5 Q R X t|j}| tdt	j
 | | d| d S )Nr	   z Function({})z4(array(float64, 1d, C), Literal[int](0), complex128))r<   r   r   r,   r6   r=   r5   r   rA   operatorsetitemrS   r	   r	   r
   test_array_setitem_invalid_cast   s    
z/TestTypingError.test_array_setitem_invalid_castc           
   	   C   s   ddl m} |dd }| t}|  W 5 Q R X t|j}d}| || dd | D }dd	g}t|D ]\}}	| 	t
|	||  qpd S )
Nr   )njitc                  S   s   d} t | D ]\}}q| S r   )	enumerate)r&   r   br	   r	   r
   r      s    zJTestTypingError.test_template_rejection_error_message_cascade.<locals>.fooz	No match.c                 S   s   g | ]}d |kr|qS rF   r	   rG   r	   r	   r
   rI      s      zQTestTypingError.test_template_rejection_error_message_cascade.<locals>.<listcomp>z4.*During: resolving callee type: Function.*enumeraterJ   )numbarX   r<   r   r6   r=   r5   rK   rY   rL   rM   rN   )
r.   rX   r   r>   rO   rB   rP   rN   ir   r	   r	   r
   -test_template_rejection_error_message_cascade   s    

z=TestTypingError.test_template_rejection_error_message_cascadeN)r0   r1   r2   r:   r;   r?   rC   rE   rQ   rR   rT   rW   r]   r	   r	   r	   r
   r3   ?   s   r3   c                   @   s    e Zd ZdZdd Zdd ZdS )TestArgumentTypingErrorzQ
    Test diagnostics of typing errors caused by argument inference failure.
    c              	   C   sl   t ddt}td}||j }| t}|d|| W 5 Q R X d|j }| 	|t
|j d S )NTZnopython   r   zUnsupported array dtype: )r   r'   r   onesr!   r)   Znewbyteorderr<   r   r5   r6   r=   )r.   cfuncr   r>   rB   r	   r	   r
   test_unsupported_array_dtype   s    
z4TestArgumentTypingError.test_unsupported_array_dtypec              	   C   s^   t ddt}t }| t}|d|d W 5 Q R X td}| |t	|j
d k	 d S )NTr_   r   zThis error may have been caused by the following argument\(s\):\n- argument 1:.*Cannot determine Numba type of <class 'numba.tests.test_typingerror.Foo'>)r   r'   r-   r<   r   rM   compilerL   rN   r6   r=   )r.   rb   r   r>   rB   r	   r	   r
   test_unsupported_type   s    
z-TestArgumentTypingError.test_unsupported_typeN)r0   r1   r2   __doc__rc   re   r	   r	   r	   r
   r^      s   
r^   c                   @   s   e Zd Zdd ZdS )TestCallErrorc              	      s|   t ddddd t dd fdd}tjdtjd	 | t}|  W 5 Q R X t|j}d
}| t	
|| d S )Nz(f8[:],)Tr_   c                 S   s   | S r   r	   r   r	   r	   r
   inner   s    z0TestCallError.test_readonly_array.<locals>.innerc                      s    S r   r	   r	   Zgvaluesrh   r	   r
   outer   s    z0TestCallError.test_readonly_array.<locals>.outer
   r(   z0Invalid use of.*readonly array\(float64, 1d, C\))r   r   ra   r+   r<   r   r6   r=   ZassertIsNotNonerM   rN   )r.   rj   r>   gotpatr	   ri   r
   test_readonly_array   s    


z!TestCallError.test_readonly_arrayN)r0   r1   r2   rn   r	   r	   r	   r
   rg      s   rg   __main__)%r   rM   textwraprU   numpyr   ZunittestZnumba.core.compilerr   r[   r   Z
numba.corer   Znumba.core.errorsr   Znumba.core.types.functionsr   Znumba.tests.supportr   r   r   r   r   r   r   r   r#   r$   r'   r,   objectr-   r3   r^   rg   r0   mainr	   r	   r	   r
   <module>   s8   }
