o
    ۾iC                     @   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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re#  dS dS )&    N)jitnjit)types)TypingError)_header_lead)TestCasec                   C      d S N r
   r
   r
   P/home/ubuntu/.local/lib/python3.10/site-packages/numba/tests/test_typingerror.pywhat      r   c                   C   s   t  S r	   )r   r
   r
   r
   r   foo      r   c                 C   s   | j S r	   axr
   r
   r   bar   r   r   c                 C   s
   | j d S )N   )shaper   r
   r
   r   	issue_868      
r   c                 C   s   | dkrdS dS )Nr   r
                 ?r
   r   r
   r
   r   impossible_return_type   s   r   c                   C   
   t dS N   )mathhypotr
   r
   r
   r   bad_hypot_usage"   r   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   r   )Nr   )numpyzr'   r
   r
   r
   r   unknown_module-   r   r*   c                 C   r   r	   r
   )r   yzr
   r
   r   nop0   r   r-   c                  C   s   t jdt jd} d| d< | S )Nr   dtyper   r   )r$   emptyfloat64)arrr
   r
   r   array_setitem_invalid_cast3   s   r3   c                   @      e Zd Zdd ZdS )Fooc                 C   s   dS )Nz<Foo instance>r
   )selfr
   r
   r   __repr__:   r   zFoo.__repr__N)__name__
__module____qualname__r7   r
   r
   r
   r   r5   9       r5   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   sV   zt dt W n ty# } z| dt| W Y d }~d S d }~ww | d d S )Nr
   zUntyped global name 'what'Should raise error)r   r   r   assertInstrfailr6   er
   r
   r   test_unknown_function@   s   z%TestTypingError.test_unknown_functionc              
   C   sZ   z
t tjft W n ty% } z| dt| W Y d }~d S d }~ww | d d S )Nz#Unknown attribute 'a' of type int32r=   )r   r   r'   r   r   r>   r?   r@   rA   r
   r
   r   test_unknown_attrsH   s   z"TestTypingError.test_unknown_attrsc                 C   sL   |  t}tdt W d    n1 sw   Y  | dt|j d S )Nr
   zname 'numpyz' is not defined)assertRaisesr   r   r*   r>   r?   	exception)r6   raisesr
   r
   r   test_unknown_moduleP   s   z#TestTypingError.test_unknown_modulec                 C   s   |  t}tttjddft W d   n1 sw   Y  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   CNzX Function(<built-in function mul>) found for signature:
 
 >>> mul(UniTuple({} x 1), {})r   zDuring: typing of)rE   r   r   r   Arrayr'   r   r   formatr?   intpIntegerLiteralr>   rF   )r6   rG   expectedr
   r
   r   test_issue_868V   s   zTestTypingError.test_issue_868c                 C   sT   |  t}ttjft W d    n1 sw   Y  d}| |t|j d S )NzECan't unify return type from the following types: Tuple(), complex128)	rE   r   r   r   r'   r   r>   r?   rF   )r6   rG   msgr
   r
   r   test_return_type_unificatione   s
   z,TestTypingError.test_return_type_unificationc                 C   s   |  t}tdt W d    n1 sw   Y  t|j}| d| dd | D }| t	
d|d  | t	
d|d  d S )	Nr
   z  * (float64, float64) -> float64c                 S      g | ]}d |v r|qS zDuring:r
   .0r   r
   r
   r   
<listcomp>v       z8TestTypingError.test_bad_hypot_usage.<locals>.<listcomp>z0.*During: resolving callee type: Function.*hypotr   ..*During: typing of call .*test_typingerror.pyr   )rE   r   r   r    r?   rF   r>   
splitlines
assertTrueresearch)r6   rG   errmsg	ctx_linesr
   r
   r   test_bad_hypot_usagel   s   
z$TestTypingError.test_bad_hypot_usagec                 C   s`   |  t}tdt W d   n1 sw   Y  t|j}d}| || | d| dS )z|
        Type inference should catch that a list type's remain imprecise,
        instead of letting lowering fail.
        r
   NzKCannot infer the type of variable 'l', have imprecise type: list(undefined)z&For Numba to be able to compile a list)rE   r   r   r#   r?   rF   r>   )r6   rG   r]   rP   r
   r
   r   test_imprecise_list}   s   
z#TestTypingError.test_imprecise_listc                 C   sP   |  t}tdt W d   n1 sw   Y  t|j}| d| dS )zh
        Type inference should report informative error about untyped list.
        TODO: #2931
        r
   NzUndecided type)rE   r   r   r(   r?   rF   r>   r6   rG   r]   r
   r
   r   test_using_imprecise_list   s
   
z)TestTypingError.test_using_imprecise_listc                 C   sh   |  t}tdt W d    n1 sw   Y  t|j}| tdt	j
 | | d| d S )Nr
   z Function({})z4(array(float64, 1d, C), Literal[int](0), complex128))rE   r   r   r3   r?   rF   r>   r   rK   operatorsetitemra   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 d    n1 sw   Y  t|j}d}| || dd | D }dd	g}t|D ]\}}	| 	t
|	||  qBd S )
Nr   )r   c                  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   rR   rS   r
   rT   r
   r
   r   rV      rW   zQTestTypingError.test_template_rejection_error_message_cascade.<locals>.<listcomp>z4.*During: resolving callee type: Function.*enumeraterX   )numbar   rE   r   r?   rF   r>   rY   rf   rZ   r[   r\   )
r6   r   r   rG   r]   rN   r^   r\   ir   r
   r
   r   -test_template_rejection_error_message_cascade   s    

z=TestTypingError.test_template_rejection_error_message_cascadeN)r8   r9   r:   rC   rD   rH   rO   rQ   r_   r`   rb   re   rj   r
   r
   r
   r   r<   >   s    r<   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   s   t ddt}td}||j }| t}|d|| W d    n1 s*w   Y  d|j }| 	|t
|j d S )NTnopython   r   zUnsupported array dtype: )r   r-   r$   onesr&   r/   newbyteorderrE   r   r>   r?   rF   )r6   cfuncr   rG   rN   r
   r
   r   test_unsupported_array_dtype   s   
z4TestArgumentTypingError.test_unsupported_array_dtypec                 C   sr   t ddt}t }| t}|d|d W d    n1 s w   Y  td}| |t	|j
d u d S )NTrl   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-   r5   rE   r   r[   compilerZ   r\   r?   rF   )r6   rq   r   rG   rN   r
   r
   r   test_unsupported_type   s   
z-TestArgumentTypingError.test_unsupported_typeN)r8   r9   r:   __doc__rr   rt   r
   r
   r
   r   rk      s    
rk   c                   @   r4   )TestCallErrorc                    s   t ddddd t dd fdd}tjdtjd	 | t}|  W d    n1 s1w   Y  t|j}d
}| t	
|| d S )Nz(f8[:],)Trl   c                 S   s   | S r	   r
   r   r
   r
   r   inner   s   z0TestCallError.test_readonly_array.<locals>.innerc                      s    S r	   r
   r
   gvaluesrw   r
   r   outer   s   z0TestCallError.test_readonly_array.<locals>.outer
   r.   z0Invalid use of.*readonly array\(float64, 1d, C\))r   r$   ro   r1   rE   r   r?   rF   assertIsNotNoner[   r\   )r6   rz   rG   gotpatr
   rx   r   test_readonly_array   s   


z!TestCallError.test_readonly_arrayN)r8   r9   r:   r   r
   r
   r
   r   rv      r;   rv   __main__)$r   r[   textwraprc   numpyr$   unittestrh   r   r   
numba.corer   numba.core.errorsr   numba.core.types.functionsr   numba.tests.supportr   r   r   r   r   r   r    r#   r(   r*   r-   r3   objectr5   r<   rk   rv   r8   mainr
   r
   r
   r   <module>   s:    }