o
    Z۷i                     @   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nopythonc                 C   
   | ||fS N abcr   r   S/home/ubuntu/vllm_env/lib/python3.10/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   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
   

r0   c                 C   s   t | |dS )N)r   )r*   r!   r   r   r   call_generatedA   r,   r1   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)forceobjr	   r   )dictr   )r:   r9   objmoder;   flagsr   r8   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   rA   rB   r   r   outerU   s   z1TestNestedCall.test_boolean_return.<locals>.outerF)r   assertFalse
assertTrue)r:   rD   r   rC   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   r:   r>   cfuncr;   r   r   r   test_named_args_      zTestNestedCall.test_named_argsc                 C      | j dd d S NT)r>   )rM   r:   r   r   r   test_named_args_objmodeg      z&TestNestedCall.test_named_args_objmodec                 C   rH   )zL
        Test a nested function call using default argument values.
        rI   r   r   rJ   N)r@   r   rK   r   r   r   test_default_argsj   rN   z TestNestedCall.test_default_argsc                 C   rO   rP   )rT   rQ   r   r   r   test_default_args_objmoder   rS   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.
        rI   r   r   N)r@   r$   r:   rL   r;   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.
        rI   )r   )r   N)r@   r%   rK   r   r   r   test_star_call|   s   zTestNestedCall.test_star_callc                 C   rO   rP   )rX   rQ   r   r   r   test_star_call_objmode   rS   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.
        rI   r   N)r@   r'   rV   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	   rI   r   )r   y              ?)y      @      ?r   N)r   r1   r3   )r:   rL   r   r   r   test_call_generated   s   z"TestNestedCall.test_call_generatedN)F)__name__
__module____qualname__r@   rG   rM   rR   rT   rU   rW   rX   rY   rZ   r\   r   r   r   r   r2   E   s    
	


	r2   __main__)r   r   )r    r-   )__doc__numbar   r   r   
numba.corer   numba.extendingr   numba.tests.supportr   r   unittestr   r   r   r   r"   r$   r%   r&   r'   r*   r0   r1   r2   r]   mainr   r   r   r   <module>   s8    



S