o
    1&iT                     @   s  d 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
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d+d d!Zeed+d"d#Zd$d% ZG d&d' d'e
Zed(kre  dS dS ),zd
Test problems in nested calls.
Usually due to invalid type conversion between function boundaries.
    )int32int64)jit)types)overload)TestCasetagNTZnopythonc                 C   
   | ||fS N abcr   r   HC:\wamp64\www\opt\env\Lib\site-packages\numba/tests/test_nested_calls.pyf_inner      
r   c                 C   s   t | ||dS )N)r   r   )r   xyzr   r   r   f      r         c                 C   r
   r   r   r   r   r   r   g_inner   r   r   c                 C   s   t | |dt || dfS )N)r   )r   r   )r   r   r   r   r   g      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 | g|R  t | fS r   r"   r   r   r   r   	star_call$   r   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.   r   r&      c                 C   s   J d)Nr   Zunreachabler   r   r   r   r   generated_inner2   s   r(   c                 C   s(   t | tjrddd}|S ddd}|S )Nr   r'   c                 S   s   | | |fS r   r   r   r   r   r   impl9      z ol_generated_inner.<locals>.implc                 S   s   | | |fS r   r   r   r   r   r   r)   <   r*   r   r'   )
isinstancer   Complex)r   r   r   r)   r   r   r   ol_generated_inner6   s
   

r.   c                 C   s   t | |dS )N)r   )r(   r    r   r   r   call_generatedA   r*   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                    sB    fdd}|rt ddnt dd}tdi |  |fS )Nc                     s,   | i |} | i |} || d S r   )assertPreciseEqual)argskwargsexpectedresultr   pyfuncselfr   r   checkH   s   z*TestNestedCall.compile_func.<locals>.checkT)Zforceobjr	   r   )dictr   )r8   r7   objmoder9   flagsr   r6   r   compile_funcG   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   innerQ   s   z1TestNestedCall.test_boolean_return.<locals>.innerc                    s    | rdS dS )NTFr   r>   r?   r   r   outerU   s   z1TestNestedCall.test_boolean_return.<locals>.outerF)r   ZassertFalse
assertTrue)r8   rA   r   r@   r   test_boolean_returnP   s   
z"TestNestedCall.test_boolean_returnc                 C   .   |  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)r=   r   r8   r;   cfuncr9   r   r   r   test_named_args_      zTestNestedCall.test_named_argsc                 C      | j dd d S NT)r;   )rI   r8   r   r   r   test_named_args_objmodeg      z&TestNestedCall.test_named_args_objmodec                 C   rD   )zL
        Test a nested function call using default argument values.
        rE   r   r   rF   N)r=   r   rG   r   r   r   test_default_argsj   rJ   z TestNestedCall.test_default_argsc                 C   rK   rL   )rP   rM   r   r   r   test_default_args_objmoder   rO   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.
        rE   r   r   N)r=   r#   r8   rH   r9   r   r   r   test_star_argsu   s   zTestNestedCall.test_star_argsc                 C   s    |  t|\}}|ddd dS )z4
        Test a function call with a *args.
        rE   )r   )r   N)r=   r$   rG   r   r   r   test_star_call|   s   zTestNestedCall.test_star_callc                 C   rK   rL   )rT   rM   r   r   r   test_star_call_objmode   rO   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.
        rE   r   N)r=   r&   rR   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	   rE   r   )r   y              ?)y      @      ?r   N)r   r/   r1   )r8   rH   r   r   r   test_call_generated   s   z"TestNestedCall.test_call_generatedN)F)__name__
__module____qualname__r=   rC   rI   rN   rP   rQ   rS   rT   rU   rV   rX   r   r   r   r   r0   E   s    
	


	r0   __main__)r   r   )r   r+   )__doc__Znumbar   r   r   Z
numba.corer   Znumba.extendingr   Znumba.tests.supportr   r   Zunittestr   r   r   r   r!   r#   r$   r%   r&   r(   r.   r/   r0   rY   mainr   r   r   r   <module>   s8    



S