
    J/Ph                        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
             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 G d de
          Zedk    r ej                     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                     | ||fS N abcs      ]/var/www/html/test/jupyter/venv/lib/python3.11/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                 F    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                 D    t          |           t          | ||          fS )N)r   r&   r   s      r   starr)   !   s!    ???Jq!Q////r   c                 .    t          | g|R  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     !HHHr   c                 <    t          t          |           |          S r   )r-   r   r%   s     r   argcastr/   .   s    q1%%%r      c                     J d            )Nr   unreachabler   r   s      r   generated_innerr3   2   s    mr   c                 L    t          | t          j                  rdd}ndd}|S )Nr#   r0   c                     | |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   r6   z ol_generated_inner.<locals>.impl<   r7   r   r#   r0   )
isinstancer   Complex)r   r   r   r6   s       r   ol_generated_innerr<   6   sH    !U]## 	 	 	 	 		 	 	 	Kr   c                 $    t          | |          S )N)r   )r3   r%   s     r   call_generatedr>   A   s    1""""r   c                   X    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S )TestNestedCallFc                       fd}|rt          d          nt          d          } t          di |          |fS )Nc                  T     | i |} | i |}                     ||           d S r   )assertPreciseEqual)argskwargsexpectedresultr   pyfuncselfs       r   checkz*TestNestedCall.compile_func.<locals>.checkH   sG    vt.v..HQ'''F##FH55555r   T)forceobjr
   r   )dictr   )rI   rH   objmoderJ   flagsr   s   ``   @r   compile_funczTestNestedCall.compile_funcG   sq    	6 	6 	6 	6 	6 	6 	6 (/Gd####D$4G4G4GCLL%LL  %xr   c                     t          d          d             t          d          fd            }|                      |d                     |                      |d                     d S )NTr
   c                     |  S r   r   )r   s    r   innerz1TestNestedCall.test_boolean_return.<locals>.innerQ   s	    5Lr   c                 "     |           rdS dS )NTFr   )r   rR   s    r   outerz1TestNestedCall.test_boolean_return.<locals>.outerU   s    uQxx tur   F)r   assertFalse
assertTrue)rI   rT   rR   s     @r   test_boolean_returnz"TestNestedCall.test_boolean_returnP   s    	d				 	 
		 
d				 	 	 	 
		 	t%%%e%%%%%r   c                 x    |                      t          |          \  }} |ddd            |ddd           dS )zM
        Test a nested function call with named (keyword) arguments.
           r   r   r   r   N)rO   r   rI   rM   cfuncrJ   s       r   test_named_argszTestNestedCall.test_named_args_   K     ((G44uaAa1r   c                 2    |                      d           d S NT)rM   )r]   rI   s    r   test_named_args_objmodez&TestNestedCall.test_named_args_objmodeg   s    T*****r   c                 x    |                      t          |          \  }} |ddd            |ddd           dS )zL
        Test a nested function call using default argument values.
        rY   r   r   rZ   N)rO   r"   r[   s       r   test_default_argsz TestNestedCall.test_default_argsj   r^   r   c                 2    |                      d           d S r`   )rd   ra   s    r   test_default_args_objmodez(TestNestedCall.test_default_args_objmoder   s    t,,,,,r   c                 Z    |                      t                    \  }} |ddd           dS )zX
        Test a nested function call to a function with *args in its signature.
        rY   r   r   N)rO   r)   rI   r\   rJ   s      r   test_star_argszTestNestedCall.test_star_argsu   s0     ((..uaAr   c                 \    |                      t          |          \  }} |ddd           dS )z4
        Test a function call with a *args.
        rY   )r   )r   N)rO   r+   r[   s       r   test_star_callzTestNestedCall.test_star_call|   s7     ((G<<uatr   c                 2    |                      d           d S r`   )rk   ra   s    r   test_star_call_objmodez%TestNestedCall.test_star_call_objmode   s    D)))))r   c                 p    |                      t                    \  }} |dd            |dd           dS )zm
        Issue #1488: implicitly casting an argument variable should not
        break nested calls.
        rY   r   N)rO   r/   rh   s      r   test_argcastzTestNestedCall.test_argcast   s=    
 ((11uaar   c                      t          d          t                    }|                      |dd          d           |                      |dd          d           dS )	zJ
        Test a nested function call to a generated jit function.
        Tr
   rY   r   )r   y              ?)y      @      ?r   N)r   r>   rC   )rI   r\   s     r   test_call_generatedz"TestNestedCall.test_call_generated   sd     #T""">22aW555b!k:::::r   N)F)__name__
__module____qualname__rO   rW   r]   rb   rd   rf   ri   rk   rm   ro   rr   r   r   r   r@   r@   E   s           & & &   + + +   - - -     * * *  ; ; ; ; ;r   r@   __main__)r   r   )r#   r9   )__doc__numbar   r   r   
numba.corer   numba.extendingr   numba.tests.supportr   r	   unittestr   r   r    r"   r&   r)   r+   r-   r/   r3   r<   r>   r@   rs   mainr   r   r   <module>r~      s                         $ $ $ $ $ $ - - - - - - - -  d        d   . . . d   0 0 0- - - d  & & &    
/   # # #P; P; P; P; P;X P; P; P;f zHMOOOOO r   