U
    iâËd[  ã                   @   sþ   d Z ddlmZmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
 ddlZedd�d	d
„ ƒZdd„ Zedd�d&dd„ƒZdd„ Zedd�d'dd„ƒZdd„ Zdd„ Zedd�dd„ ƒZdd„ Zedd�d(dd „ƒZd!d"„ ZG d#d$„ d$e	ƒZed%k� rúe ¡  dS ))zd
Test problems in nested calls.
Usually due to invalid type conversion between function boundaries.
é    )Úint32Úint64)ÚjitÚgenerated_jit)Útypes)ÚTestCaseÚtagNT©Znopythonc                 C   s
   | ||fS ©N© ©ÚaÚbÚcr   r   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_nested_calls.pyÚf_inner   s    r   c                 C   s   t | ||d�S )N)r   r   )r   ©ÚxÚyÚzr   r   r   Úf   s    r   é   é   c                 C   s
   | ||fS r
   r   r   r   r   r   Úg_inner   s    r   c                 C   s   t | |d�t || d�fS )N)r   )r   r   )r   r   r   r   r   Úg   s    r   é   c                 G   s   | |fS r
   r   ©r   r   r   r   r   Ú
star_inner   s    r   c                 C   s   t | d�t | ||ƒfS )N)r   ©r   r   r   r   r   Ústar    s    r   c                 C   s   t | f|žŽ t |Ž fS r
   r   r   r   r   r   Ú	star_call#   s    r    c                 C   s   |rt dƒ} | S )Nr   )r   r   r   r   r   Úargcast_inner&   s    r!   c                 C   s   t t| ƒ|ƒS r
   )r!   r   r   r   r   r   Úargcast-   s    r"   é   c                 C   s"   t | tjƒrdd„ }ndd„ }|S )Nc                 S   s   | | |fS r
   r   r   r   r   r   Úimpl3   s    zgenerated_inner.<locals>.implc                 S   s   | | |fS r
   r   r   r   r   r   r$   6   s    )Ú
isinstancer   ÚComplex)r   r   r   r$   r   r   r   Úgenerated_inner0   s    
r'   c                 C   s   t | |d�S )N)r   )r'   r   r   r   r   Úcall_generated:   s    r(   c                   @   sl   e Zd Zddd„Zdd„ Zddd„Zdd	„ Zdd
d„Zdd„ Zdd„ Z	ddd„Z
dd„ Zdd„ Zdd„ ZdS )ÚTestNestedCallFc                    s>   ‡ ‡‡fdd„}|rt dd�nt dd�}tf |Žˆƒ‰ ˆ |fS )Nc                     s$   ˆ| |Ž}ˆ | |Ž}ˆ  ||¡ d S r
   )ÚassertPreciseEqual)ÚargsÚkwargsÚexpectedÚresult©r   ÚpyfuncÚselfr   r   ÚcheckA   s    

z*TestNestedCall.compile_func.<locals>.checkT)Zforceobjr	   )Údictr   )r1   r0   Úobjmoder2   Úflagsr   r/   r   Úcompile_func@   s    zTestNestedCall.compile_funcc                    sH   t dd�dd„ ƒ‰ t dd�‡ fdd„ƒ}|  |dƒ¡ |  |dƒ¡ d S )NTr	   c                 S   s   |  S r
   r   ©r   r   r   r   ÚinnerJ   s    z1TestNestedCall.test_boolean_return.<locals>.innerc                    s   ˆ | ƒrdS dS d S )NTFr   r7   ©r8   r   r   ÚouterN   s    z1TestNestedCall.test_boolean_return.<locals>.outerF)r   ZassertFalseÚ
assertTrue)r1   r:   r   r9   r   Útest_boolean_returnI   s    
z"TestNestedCall.test_boolean_returnc                 C   s.   |   t|¡\}}|dddƒ |dddd� dS )zM
        Test a nested function call with named (keyword) arguments.
        é   r   r   ©r   r   N)r6   r   ©r1   r4   Úcfuncr2   r   r   r   Útest_named_argsX   s    zTestNestedCall.test_named_argsc                 C   s   | j dd� d S ©NT)r4   )rA   ©r1   r   r   r   Útest_named_args_objmode`   s    z&TestNestedCall.test_named_args_objmodec                 C   s.   |   t|¡\}}|dddƒ |dddd� dS )zL
        Test a nested function call using default argument values.
        r=   r   r   r>   N)r6   r   r?   r   r   r   Útest_default_argsc   s    z TestNestedCall.test_default_argsc                 C   s   | j dd� d S rB   )rE   rC   r   r   r   Útest_default_args_objmodek   s    z(TestNestedCall.test_default_args_objmodec                 C   s   |   t¡\}}|dddƒ dS )zX
        Test a nested function call to a function with *args in its signature.
        r=   r   r   N)r6   r   ©r1   r@   r2   r   r   r   Útest_star_argsn   s    zTestNestedCall.test_star_argsc                 C   s    |   t|¡\}}|dddƒ dS )z4
        Test a function call with a *args.
        r=   )r   )r   N)r6   r    r?   r   r   r   Útest_star_callu   s    zTestNestedCall.test_star_callc                 C   s   | j dd� d S rB   )rI   rC   r   r   r   Útest_star_call_objmode|   s    z%TestNestedCall.test_star_call_objmodec                 C   s&   |   t¡\}}|ddƒ |ddƒ dS )zm
        Issue #1488: implicitly casting an argument variable should not
        break nested calls.
        r=   r   N)r6   r"   rG   r   r   r   Útest_argcast   s    
zTestNestedCall.test_argcastc                 C   s6   t dd�tƒ}|  |ddƒd¡ |  |ddƒd¡ dS )	zJ
        Test a nested function call to a generated jit function.
        Tr	   r=   r   )éüÿÿÿr   y              ð?)y      @      ð?r   N)r   r(   r*   )r1   r@   r   r   r   Útest_call_generatedˆ   s    z"TestNestedCall.test_call_generatedN)F)F)F)F)Ú__name__Ú
__module__Ú__qualname__r6   r<   rA   rD   rE   rF   rH   rI   rJ   rK   rM   r   r   r   r   r)   >   s   
	


	r)   Ú__main__)r   r   )r   )r   r#   )Ú__doc__Znumbar   r   r   r   Z
numba.corer   Znumba.tests.supportr   r   Zunittestr   r   r   r   r   r   r    r!   r"   r'   r(   r)   rN   Úmainr   r   r   r   Ú<module>   s0   

	S
