
    pi                     n   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
        Zd Z ed	      dd       Zd Z ed	      dd       Zd Zd Z ed	      d        Zd ZddZ e	e      dd       Zd ZdefdZ G d de      Zedk(  r ej<                          yy)zd
Test problems in nested calls.
Usually due to invalid type conversion between function boundaries.
    )int32int64)jitnjit)types)overload)TestCasetagNTnopythonc                     | ||fS N abcs      _/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/numba/tests/test_nested_calls.pyf_innerr          a7N    c                     t        | ||      S )N)r   r   )r   xyzs      r   fr      s    1Qr   c                     | ||fS r   r   r   s      r   g_innerr      r   r   c                 6    t        | |      t        ||       fS )N)r   )r   r   )r   r   s      r   gr!      s    1?Ga1---r   c                 
    | |fS r   r   r   r   s     r   
star_innerr$      s    a4Kr   c                 4    t        |       t        | ||      fS )N)r   r$   r   s      r   starr'   !   s    ?Jq!Q///r   c                 *    t        | g| t        | fS r   r&   r   s      r   	star_callr)   $   s    a!j!n,,r   c                      |rt        d      } | S )Nr   )r   r#   s     r   argcast_innerr+   '   s    !HHr   c                 ,    t        t        |       |      S r   )r+   r   r#   s     r   argcastr-   .   s    q1%%r   c                     J d       )Nunreachabler   r   s      r   generated_innerr0   2   s    m1r   c                 N    t        | t        j                        rdd}|S dd}|S )Nc                     | |z   |fS r   r   r   s      r   implz ol_generated_inner.<locals>.impl9       q5!8Or   c                     | |z
  |fS r   r   r   s      r   r3   z ol_generated_inner.<locals>.impl<   r4   r         )
isinstancer   Complex)r   r   r   r3   s       r   ol_generated_innerr;   6   s&    !U]]#	
 K	Kr   c                     t        | |      S )N)r   )r0   r#   s     r   call_generatedr=   A   s    1""r   returnc                  $    dt         dt         fd} y)N	inner_argr>   c                     | S r   r   )r@   s    r   innerznested_annotated.<locals>.innerF   s    r      )int)rB   s    r   nested_annotatedrE   E   s      r   c                   \    e Zd ZddZd ZddZd ZddZd Zd Z	ddZ
d	 Zd
 Zd Zd Zy)TestNestedCallc                 t      fd}|rt        d      nt        d      } t        di |      |fS )Nc                  J     | i |} | i |}j                  ||       y r   )assertPreciseEqual)argskwargsexpectedresultr   pyfuncselfs       r   checkz*TestNestedCall.compile_func.<locals>.checkN   s1    t.v.H''F##FH5r   T)forceobjr   r   )dictr   )rP   rO   objmoderQ   flagsr   s   ``   @r   compile_funczTestNestedCall.compile_funcM   s8    	6 (/d#D$4GCL%L %xr   c                     t        d      d        t        d      fd       }| j                   |d             | j                   |d             y )NTr   c                     |  S r   r   )r   s    r   rB   z1TestNestedCall.test_boolean_return.<locals>.innerW   s	    5Lr   c                      |       ryy)NTFr   )r   rB   s    r   outerz1TestNestedCall.test_boolean_return.<locals>.outer[   s    Qxr   F)r   assertFalse
assertTrue)rP   rZ   rB   s     @r   test_boolean_returnz"TestNestedCall.test_boolean_returnV   sW    	d		 
	 
d		 
	 	t%e%r   c                 `    | j                  t        |      \  }} |ddd        |ddd       y)zM
        Test a nested function call with named (keyword) arguments.
        rC         r   r   N)rV   r   rP   rT   cfuncrQ   s       r   test_named_argszTestNestedCall.test_named_argse   1     ((G4uaAa1r   c                 (    | j                  d       y NT)rT   )rd   rP   s    r   test_named_args_objmodez&TestNestedCall.test_named_args_objmodem   s    T*r   c                 `    | j                  t        |      \  }} |ddd        |ddd       y)zL
        Test a nested function call using default argument values.
        rC   r_   r`   ra   N)rV   r!   rb   s       r   test_default_argsz TestNestedCall.test_default_argsp   re   r   c                 (    | j                  d       y rg   )rk   rh   s    r   test_default_args_objmodez(TestNestedCall.test_default_args_objmodex   s    t,r   c                 H    | j                  t              \  }} |ddd       y)zX
        Test a nested function call to a function with *args in its signature.
        rC   r_   r`   N)rV   r'   rP   rc   rQ   s      r   test_star_argszTestNestedCall.test_star_args{   s#     ((.uaAr   c                 J    | j                  t        |      \  }} |ddd       y)z4
        Test a function call with a *args.
        rC   )r_   )r`   N)rV   r)   rb   s       r   test_star_callzTestNestedCall.test_star_call   s&     ((G<uatr   c                 (    | j                  d       y rg   )rr   rh   s    r   test_star_call_objmodez%TestNestedCall.test_star_call_objmode   s    D)r   c                 X    | j                  t              \  }} |dd        |dd       y)zm
        Issue #1488: implicitly casting an argument variable should not
        break nested calls.
        rC   r   N)rV   r-   ro   s      r   test_argcastzTestNestedCall.test_argcast   s*    
 ((1uaar   c                      t        d      t              }| j                   |dd      d       | j                   |dd      d       y)	zJ
        Test a nested function call to a generated jit function.
        Tr   rC   r_   )r_   y              ?)y      @      ?r_   N)r   r=   rJ   rP   rc   s     r   test_call_generatedz"TestNestedCall.test_call_generated   sA     #T">2aW5b!k:r   c                 :     t               t              } |        y)z<
        Tested a nested function with annotations.
        N)r   rE   ry   s     r   test_nested_annotatedz$TestNestedCall.test_nested_annotated   s     '(r   N)F)__name__
__module____qualname__rV   r]   rd   ri   rk   rm   rp   rr   rt   rv   rz   r|   r   r   r   rG   rG   K   s>    &+-*;r   rG   __main__)r_   r`   )r7   r6   )__doc__numbar   r   r   r   
numba.corer   numba.extendingr   numba.tests.supportr	   r
   unittestr   r   r   r!   r$   r'   r)   r+   r-   r0   r;   r=   rD   rE   rG   r}   mainr   r   r   <module>r      s       $ -  d   d . d 0- d & 
/ ## XX Xv zHMMO r   