o
    i                     @   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	 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d&ef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njit)types)overload)TestCasetagNTnopythonc                 C   
   | ||fS N abcr   r   [/home/ubuntu/transcripts/venv/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
   

r1   c                 C   s   t | |dS )N)r   )r+   r"   r   r   r   call_generatedA   r-   r2   returnc                  C   s   dt dt fdd} dS )N	inner_argr3   c                 S   s   | S r   r   )r4   r   r   r   innerF   s   znested_annotated.<locals>.inner   )intr5   r   r   r   nested_annotatedE   s   r9   c                   @   st   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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   checkN   s   z*TestNestedCall.compile_func.<locals>.checkT)forceobjr
   r   )dictr   )rB   rA   objmoderC   flagsr   r@   r   compile_funcM   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   r5   W   s   z1TestNestedCall.test_boolean_return.<locals>.innerc                    s    | rdS dS )NTFr   rI   r8   r   r   outer[   s   z1TestNestedCall.test_boolean_return.<locals>.outerF)r   assertFalse
assertTrue)rB   rJ   r   r8   r   test_boolean_returnV   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.
        r6   r   r   r   r   N)rH   r   rB   rF   cfuncrC   r   r   r   test_named_argse      zTestNestedCall.test_named_argsc                 C      | j dd d S NT)rF   )rR   rB   r   r   r   test_named_args_objmodem      z&TestNestedCall.test_named_args_objmodec                 C   rN   )zL
        Test a nested function call using default argument values.
        r6   r   r   rO   N)rH   r   rP   r   r   r   test_default_argsp   rS   z TestNestedCall.test_default_argsc                 C   rT   rU   )rY   rV   r   r   r   test_default_args_objmodex   rX   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.
        r6   r   r   N)rH   r%   rB   rQ   rC   r   r   r   test_star_args{   s   zTestNestedCall.test_star_argsc                 C   s    |  t|\}}|ddd dS )z4
        Test a function call with a *args.
        r6   )r   )r   N)rH   r&   rP   r   r   r   test_star_call   s   zTestNestedCall.test_star_callc                 C   rT   rU   )r]   rV   r   r   r   test_star_call_objmode   rX   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.
        r6   r   N)rH   r(   r[   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
   r6   r   )r   y              ?)y      @      ?r   N)r   r2   r;   rB   rQ   r   r   r   test_call_generated   s   z"TestNestedCall.test_call_generatedc                 C   s   t  t}|  dS )z<
        Tested a nested function with annotations.
        N)r   r9   ra   r   r   r   test_nested_annotated   s   

z$TestNestedCall.test_nested_annotatedN)F)__name__
__module____qualname__rH   rM   rR   rW   rY   rZ   r\   r]   r^   r_   rb   rc   r   r   r   r   r:   K   s    
	


	r:   __main__)r   r   )r!   r.   )__doc__numbar   r   r   r   
numba.corer   numba.extendingr   numba.tests.supportr   r	   unittestr   r   r   r   r#   r%   r&   r'   r(   r+   r1   r2   r7   r9   r:   rd   mainr   r   r   r   <module>   s:    



[