
    ܙd[                        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	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 ed          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generated_jit)types)TestCasetagNTnopythonc                     | ||fS N abcs      =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                 H    t          | t          j                  rd }nd }|S )Nc                     | |z   |fS r   r   r   s      r   implzgenerated_inner.<locals>.impl3       q5!8Or   c                     | |z
  |fS r   r   r   s      r   r3   zgenerated_inner.<locals>.impl6   r4   r   )
isinstancer   Complex)r   r   r   r3   s       r   generated_innerr8   0   s>    !U]## 	 	 	 		 	 	Kr   c                 $    t          | |          S )N)r   )r8   r%   s     r   call_generatedr:   :   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>.checkA   sG    vt.v..HQ'''F##FH55555r   T)forceobjr
   r   )dictr   )rE   rD   objmoderF   flagsr   s   ``   @r   compile_funczTestNestedCall.compile_func@   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>.innerJ   s	    5Lr   c                 "     |           rdS dS )NTFr   )r   rN   s    r   outerz1TestNestedCall.test_boolean_return.<locals>.outerN   s    uQxx tur   F)r   assertFalse
assertTrue)rE   rP   rN   s     @r   test_boolean_returnz"TestNestedCall.test_boolean_returnI   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)rK   r   rE   rI   cfuncrF   s       r   test_named_argszTestNestedCall.test_named_argsX   K     ((G44uaAa1r   c                 2    |                      d           d S NT)rI   )rY   rE   s    r   test_named_args_objmodez&TestNestedCall.test_named_args_objmode`   s    T*****r   c                 x    |                      t          |          \  }} |ddd            |ddd           dS )zL
        Test a nested function call using default argument values.
        rU   r   r   rV   N)rK   r"   rW   s       r   test_default_argsz TestNestedCall.test_default_argsc   rZ   r   c                 2    |                      d           d S r\   )r`   r]   s    r   test_default_args_objmodez(TestNestedCall.test_default_args_objmodek   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.
        rU   r   r   N)rK   r)   rE   rX   rF   s      r   test_star_argszTestNestedCall.test_star_argsn   s0     ((..uaAr   c                 \    |                      t          |          \  }} |ddd           dS )z4
        Test a function call with a *args.
        rU   )r   )r   N)rK   r+   rW   s       r   test_star_callzTestNestedCall.test_star_callu   s7     ((G<<uatr   c                 2    |                      d           d S r\   )rg   r]   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.
        rU   r   N)rK   r/   rd   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
   rU   r   )r   y              ?)y      @      ?r   N)r   r:   r?   )rE   rX   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__rK   rS   rY   r^   r`   rb   re   rg   ri   rk   rn   r   r   r   r<   r<   >   s           & & &   + + +   - - -     * * *  ; ; ; ; ;r   r<   __main__)r   r   )r#   )r#   r0   )__doc__numbar   r   r   r   
numba.corer   numba.tests.supportr   r	   unittestr   r   r    r"   r&   r)   r+   r-   r/   r8   r:   r<   ro   mainr   r   r   <module>ry      s            $ $ $ $ $ $ $ $       - - - - - - - -  d        d   . . . d   0 0 0- - - d  & & &    # # #P; P; P; P; P;X P; P; P;f zHMOOOOO r   