
    J/Ph-                         d dl Zd dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZmZ d dlmZ  G d	 d
e          Z G d de          Zedk    r ej                     dS dS )    N)TestCasenjit)typeserrorscgutils	signature)models)overloadSentryLiteralArgsoverload_methodregister_model	intrinsic	literallyc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej        d
             Zej        d             Zd Zd Zd Zd Zd Zd Zd ZdS )TestLiteralDispatchc                     t           d             }|D ]!}|                      ||          |           "t          ||j                  D ]&\  }}|                     |d         j        |           'd S )Nc                      t          |           S Nr   xs    a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_literal_dispatch.pyfooz4TestLiteralDispatch.check_literal_basic.<locals>.foo   s    Q<<    r   )r   assertEqualzip
signaturesliteral_value)selfliteral_argsr   litsigs        r   check_literal_basicz'TestLiteralDispatch.check_literal_basic   s    		  	  
	    	, 	,CSSXXs++++L#.99 	8 	8HCSV137777	8 	8r   c                 b    |                      ddg           |                      ddg           d S )N{   A  abccb123)r%   )r!   s    r   test_literal_basicz&TestLiteralDispatch.test_literal_basic   s9      #s,,,  %!122222r   c                    t           d             t           fd            }d\  }}|                      |||          |dz  |z              j        \  }|                     |d         t          j        |                     |j        \  }|                     |d         t          j        |                     |                     |d         t          j                   d S )Nc                 &    t          |           dz  S )N   r   r   s    r   r   z4TestLiteralDispatch.test_literal_nested.<locals>.foo"       Q<<!##r   c                       |           |z   S r    )yr   r   s     r   barz4TestLiteralDispatch.test_literal_nested.<locals>.bar&       3q66A:r   )      r.   r      )r   r   r   r   literalassertNotIsInstanceLiteral)r!   r3   r2   r   foo_sigbar_sigr   s         @r   test_literal_nestedz'TestLiteralDispatch.test_literal_nested!   s    		$ 	$ 
	$ 
	 	 	 	 
	 1QAEAI...N	U]1%5%5666N	U]1%5%5666  U];;;;;r   c                     dd l t          fd            }|                      |d          d           |                     |j        d         d         t	          j        d                     d S )Nr   c                 $     j         |           S r   r   )r   numbas    r   r   z7TestLiteralDispatch.test_literally_freevar.<locals>.foo6   s    "5?1%%%r   r'   )r@   r   r   r   r   r8   )r!   r   r@   s     @r   test_literally_freevarz*TestLiteralDispatch.test_literally_freevar2   s    		& 	& 	& 	& 
	& 	S3'''*1-u}S/A/ABBBBBr   c                 X   d } |d           \  }} |t                     \  }}|                      |dd           |dd                     |                     |j        d         d         j        d           |                     |j        d         d         j        d           |                      |dd           |dd                     |                     |j        d         d         j        d           |                     |j        d         d         j        d           d S )	Nc                 B    | fd            | fd            fS )Nc                 8    | dk     r|S |  | dz
  |          z  S Nr7   r1   )nvalue	inner_facs     r   	outer_facz[TestLiteralDispatch.test_mutual_recursion_literal.<locals>.get_functions.<locals>.outer_fac?   s,    q55 L99QUE2222r   c                 R    | dk     rt          |          S |  | dz
  |          z  S rE   r   )rF   rG   rI   s     r   rH   z[TestLiteralDispatch.test_mutual_recursion_literal.<locals>.get_functions.<locals>.inner_facE   s5    q55$U+++99QUE2222r   r1   )decorrH   rI   s    @@r   get_functionszHTestLiteralDispatch.test_mutual_recursion_literal.<locals>.get_functions>   sY    3 3 3 3 U3
 3 3 3 3 U3
 i''r   c                     | S r   r1   r   s    r   <lambda>zCTestLiteralDispatch.test_mutual_recursion_literal.<locals>.<lambda>M   s    q r   
      r   r7         )r   r   r   r    )r!   rL   ref_outer_facref_inner_facrI   rH   s         r   test_mutual_recursion_literalz1TestLiteralDispatch.test_mutual_recursion_literal=   s7   	( 	( 	( (5}[['A'A$},}T22	92r**MM"b,A,ABBB-a03A2FFF-a03A2FFF2r**MM"b,A,ABBB-a03A2FFF-a03A2FFFFFr   c                 ,   t           fd            }t           d             t          ddd          } |di |} d di |}|                     ||           |j        \  }|                     |d         t	          j        d                     d S )	Nc                      | |          S r   r1   abcinners      r   r   z>TestLiteralDispatch.test_literal_nested_multi_arg.<locals>.fooY       5A;;r   c                 &    | t          |          z   S r   r   r   r2   s     r   r\   z@TestLiteralDispatch.test_literal_nested_multi_arg.<locals>.inner]       y||##r   r7   r.   r5   rY   rZ   r[   c                     | |z   S r   r1   ra   s      r   rN   zCTestLiteralDispatch.test_literal_nested_multi_arg.<locals>.<lambda>c   s
    !a% r   r1   )r   dictr   r   r   r8   )r!   r   kwargsgotexpectr;   r\   s         @r   test_literal_nested_multi_argz1TestLiteralDispatch.test_literal_nested_multi_argX   s    		 	 	 	 
	 
	$ 	$ 
	$ Q!$$$cmmFmm'''22622f%%%N	U]1%5%566666r   c                 N   t           fd            }t           d             t          j        d          }|                     t          j                  5 } |dd|           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nc                      | |          S r   r1   rX   s      r   r   z>TestLiteralDispatch.test_unsupported_literal_type.<locals>.fooi   r]   r   c                 &    | t          |          z   S r   r   r_   s     r   r\   z@TestLiteralDispatch.test_unsupported_literal_type.<locals>.innerm   r`   r   rO   r7   r.   ra   znumpy.ndarray)	r   nparangeassertRaisesr   LiteralTypingErrorassertInstr	exception)r!   r   arrraisesr\   s       @r   test_unsupported_literal_typez1TestLiteralDispatch.test_unsupported_literal_typeh   s    		 	 	 	 
	 
	$ 	$ 
	$ immv899 	!VC!qC    	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!os6+;'<'<=====s   A22A69A6c                    t           fd            }t           d             t          ddd          } |di |} d di |}|                     ||           |j        \  \  }}}|                     |t
          j                   |                     |t
          j                   |                     |j        d           |                     |t
          j                   |                     |j        d           d S )	Nc                 6     | |           ||          z   S r   r1   rX   s      r   r   z/TestLiteralDispatch.test_biliteral.<locals>.foox   s"    5A;;q!,,r   c                 &    | t          |          z   S r   r   r_   s     r   r\   z1TestLiteralDispatch.test_biliteral.<locals>.inner|   r`   r   r7   r.   r5   ra   c                     | |z   |z   |z   S r   r1   ra   s      r   rN   z4TestLiteralDispatch.test_biliteral.<locals>.<lambda>   s    !a%!)a- r   r1   	r   rc   r   r   r9   r   r:   assertIsInstancer    	r!   r   rd   re   rf   type_atype_btype_cr\   s	           @r   test_biliteralz"TestLiteralDispatch.test_biliteralv   s(   		- 	- 	- 	- 
	- 
	$ 	$ 
	$ Q!$$$cmmFmm///::6::f%%%%(^"	!&&&  777fem444-q111fem444-q11111r   c                    t           d             |                     t          j                  5   ddd           d d d            n# 1 swxY w Y   t           fd            }|                     t          j                  5 } |dd           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nc                      t          |          S r   r   )rY   argss     r   r   z7TestLiteralDispatch.test_literally_varargs.<locals>.foo   s    T??"r   r7   r.   r5   c                       | |           d S r   r1   rY   rZ   r   s     r   r3   z7TestLiteralDispatch.test_literally_varargs.<locals>.bar   s    C1IIIIIr   zCannot request literal type)r   rm   r   rn   TypingErrorro   rp   rq   )r!   r3   rs   r   s      @r   test_literally_varargsz*TestLiteralDispatch.test_literally_varargs   sk   		# 	# 
	# v899 	 	C1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 
	 	 	 	 
	 v122 	fC1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	) !!	
 	
 	
 	
 	
s#   AAAB  B$'B$c                 @    t           dd            } |d           d S )Nr7   c                 $    | t          |          fS r   r   rY   rZ   s     r   r   z8TestLiteralDispatch.test_literally_defaults.<locals>.foo       y||$$r   )rY   r7   r   )r!   r   s     r   test_literally_defaultsz+TestLiteralDispatch.test_literally_defaults   s5     
	% 	% 	% 
	%ar   c                 d    t           dd            t           fd            } |d           d S )Nr7   c                 $    | t          |          fS r   r   r   s     r   r   z>TestLiteralDispatch.test_literally_defaults_inner.<locals>.foo   r   r   c                       |           dz   S rE   r1   )rY   r   s    r   r3   z>TestLiteralDispatch.test_literally_defaults_inner.<locals>.bar   r4   r   r   r   )r!   r3   r   s     @r   test_literally_defaults_innerz1TestLiteralDispatch.test_literally_defaults_inner   s[     
	% 	% 	% 
	% 
	 	 	 	 
	 	Ar   c                     t           d             } |d          }|                     ||                    d                     |                     |j        d         d         t
          j                   d S )Nc                 *    t          j        |           S r   )r@   r   r   s    r   r   z;TestLiteralDispatch.test_literally_from_module.<locals>.foo   s    ?1%%%r   r'   r   )r   r   py_funcrz   r   r   r:   )r!   r   re   s      r   test_literally_from_modulez.TestLiteralDispatch.test_literally_from_module   sv    		& 	& 
	& c#hhckk#..///cnQ/2EMBBBBBr   c                     t           d             }|                     t          j                  5 } |dd           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nc                 &    t          d| z             S rE   r   r   s     r   r   z1TestLiteralDispatch.test_non_literal.<locals>.foo   s    QU###r   r7   r.   zInvalid use of non-Literal type)r   rm   r   r   ro   rp   rq   )r!   r   rs   s      r   test_non_literalz$TestLiteralDispatch.test_non_literal   s    		$ 	$ 
	$ v122 	fC1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	- !!	
 	
 	
 	
 	
s   A		AAc                    t           d              dd          }|                     |                    dd                     t           fd            } |            }|                     ||                                           d S )Nc                 J    d}| t          |          z   t          |          z   S )Ni  r   )rY   rZ   vs      r   r   z5TestLiteralDispatch.test_inlined_literal.<locals>.foo   s#    Ay||#ill22r   r7   r.   c                  &    d} d} ||           S )Nd   	   r   r1   r   s     r   r3   z5TestLiteralDispatch.test_inlined_literal.<locals>.bar   s    AA3a=== r   )r   r   r   )r!   re   r3   r   s      @r   test_inlined_literalz(TestLiteralDispatch.test_inlined_literal   s    		3 	3 
	3 c!Qiickk!Q//000		! 	! 	! 	! 
	!
 ceeckkmm,,,,,r   c                    t           fd            }t           d             t          ddd          } |di |} d di |}|                     ||           |j        \  \  }}}|                     |t
          j                   |                     |t
          j                   |                     |j        d           |                     |t
          j                   |                     |j        d           d S )	Nc                 ,      fd} ||          S )Nc                 B    t          |           d           z  z   S NrO   r   )drY   rZ   r\   s    r   closurezGTestLiteralDispatch.test_aliased_variable.<locals>.foo.<locals>.closure   s#     ||b55A;;&666r   r1   )rY   rZ   r[   r   r\   s   ``  r   r   z6TestLiteralDispatch.test_aliased_variable.<locals>.foo   s8    7 7 7 7 7 7 7 71::r   c                 &    | t          |          z   S r   r   r_   s     r   r\   z8TestLiteralDispatch.test_aliased_variable.<locals>.inner   r`   r   r7   r.   r5   ra   c                     |d| |z   z  z   S r   r1   ra   s      r   rN   z;TestLiteralDispatch.test_aliased_variable.<locals>.<lambda>   s    !bAEl"2 r   r1   ry   r{   s	           @r   test_aliased_variablez)TestLiteralDispatch.test_aliased_variable   s(   		 	 	 	 
	 
	$ 	$ 
	$ Q!$$$cmmFmm222==f==f%%%%(^"	!&&&  777fem444-q111fem444-q11111r   c                    d t                    fd            t          fd            }d}d} |||          }|                     |||z              |j        d         \  }}|                     |t
          j                   |                     |j        |           |                     |t
          j                   d S )Nc                     | |z   S r   r1   r_   s     r   do_thisz;TestLiteralDispatch.test_overload_explicit.<locals>.do_this       q5Lr   c                 x    t          dg                                                            | |           d S )Nr   c                     | |z   S r   r1   r_   s     r   rN   zPTestLiteralDispatch.test_overload_explicit.<locals>.ov_do_this.<locals>.<lambda>   s
    A r   )r   for_functionbind)r   r2   
ov_do_thiss     r   r   z>TestLiteralDispatch.test_overload_explicit.<locals>.ov_do_this   s:    se$$11*==BB1aHHH%%%r   c                      | |          S r   r1   rY   rZ   r   s     r   r   z7TestLiteralDispatch.test_overload_explicit.<locals>.foo       71a== r   r'   r(   r   )	r   r   r   r   rz   r   r:   r    r9   )	r!   r   rY   rZ   rr|   r}   r   r   s	          @@r   test_overload_explicitz*TestLiteralDispatch.test_overload_explicit   s    	 	 	 
'			& 	& 	& 	& 
		& 
	! 	! 	! 	! 
	! C1IIAE""">!,fem444-q111  77777r   c                   	 d t           d             	t                    	fd            }t           fd            }d}d} |||          }|                     |||z              |j        d         \  }}|                     |t
          j                   |                     |j        |           |                     |t
          j                   d S )Nc                     | |z   S r   r1   r_   s     r   r   z;TestLiteralDispatch.test_overload_implicit.<locals>.do_this  r   r   c                 &    t          |           |z   S r   r   r_   s     r   hiddenz:TestLiteralDispatch.test_overload_implicit.<locals>.hidden  r/   r   c                 F    t          | t          j                  rfdS d S )Nc                      | |          S r   r1   r   r2   r   s     r   rN   zPTestLiteralDispatch.test_overload_implicit.<locals>.ov_do_this.<locals>.<lambda>  s    FF1aLL r   )
isinstancer   Integerr   s     r   r   z>TestLiteralDispatch.test_overload_implicit.<locals>.ov_do_this  s0    !U]++ 1000001 1r   c                      | |          S r   r1   r   s     r   r   z7TestLiteralDispatch.test_overload_implicit.<locals>.foo  r   r   r'   r(   r   )	r   r   r   r   rz   r   r:   r    r9   )
r!   r   r   rY   rZ   r   r|   r}   r   r   s
           @@r   test_overload_implicitz*TestLiteralDispatch.test_overload_implicit  s   	 	 	 
	$ 	$ 
	$ 
'			1 	1 	1 	1 
		1
 
	! 	! 	! 	! 
	! C1IIAE""">!,fem444-q111  77777r   c                 `   d t           d             t                    fd            }t           fd            }|                     t          j                  5 } |dd           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )	Nc                     | |z   S r   r1   r_   s     r   r   z=TestLiteralDispatch.test_overload_error_loop.<locals>.do_this.  r   r   c                 &    t          |           |z   S r   r   r_   s     r   r   z<TestLiteralDispatch.test_overload_error_loop.<locals>.hidden1  r/   r   c                 n    t          |t          j                  rt          j        d          fd}|S )Noopsc                      | |          S r   r1   r   s     r   implzNTestLiteralDispatch.test_overload_error_loop.<locals>.ov_do_this.<locals>.impl<  s    !6!Q<<'r   )r   r   IntegerLiteralr   NumbaValueError)r   r2   r   r   s      r   r   z@TestLiteralDispatch.test_overload_error_loop.<locals>.ov_do_this5  sI    !U122  ,V444( ( ( ( (r   c                 6     | t          |                    S r   r   r   s     r   r   z9TestLiteralDispatch.test_overload_error_loop.<locals>.foo@  s    71ill+++r   r'   r(   r   zRepeated literal typing request)r   r   rm   r   CompilerErrorro   rp   rq   )r!   r   r   rs   r   r   s       @@r   test_overload_error_loopz,TestLiteralDispatch.test_overload_error_loop)  s2   
	 	 	 
	$ 	$ 
	$ 
'			 	 	 	 
		 
	, 	, 	, 	, 
	,
 v344 	C#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	7&*++	- 	- 	- 	- 	-s   !A;;A?A?N)__name__
__module____qualname__r%   r+   r=   rA   rU   rg   rt   r   r   unittestexpectedFailurer   r   r   r   r   r   r   r   r   r1   r   r   r   r      sK       
8 
8 
83 3 3< < <"	C 	C 	CG G G67 7 7 > > >2 2 2*
 
 
&    
 
 
C C C

 

 

- - -&2 2 2.8 8 808 8 8< -  -  -  -  -r   r   c                       e Zd Zd Zd ZdS )!TestLiteralDispatchWithCustomTypec                      G d dt                     } G fddt          j                  t                     G fddt          j                              t          fd            t          |          fd            }|fS )	Nc                       e Zd Zd ZdS )@TestLiteralDispatchWithCustomType.make_dummy_type.<locals>.Dummyc                     |S r   r1   r!   rY   s     r   r#   zDTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.Dummy.litO  s    r   N)r   r   r   r#   r1   r   r   Dummyr   N  s#            r   r   c                   "     e Zd Z fdZ xZS )DTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.DummyTypec                 P    t          |                               d           d S )Ndummy)namesuper__init__)r!   	DummyType	__class__s    r   r   zMTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.DummyType.__init__S  s*    i&&//W/=====r   r   r   r   r   __classcell__)r   r   s   @r   r   r   R  s>        > > > > > > > > > >r   r   c                   "     e Zd Z fdZ xZS )ITestLiteralDispatchWithCustomType.make_dummy_type.<locals>.DummyTypeModelc                 V    g }t          |                               |||           d S r   r   )r!   dmmfe_typemembersDummyTypeModelr   s       r   r   zRTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.DummyTypeModel.__init__X  s0    nd++44S'7KKKKKr   r   )r   r   s   @r   r   r   V  sH        L L L L L L L L L Lr   r   c                 @    d }t                                 }||fS )Nc                 p     t          j        |j                  | |          }|                                S r   )r   create_struct_proxyreturn_type	_getvalue)contextbuilderr
   r   r   s        r   codegenzVTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.init_dummy.<locals>.codegen^  s?    +3)+ ++2G= = (((r   r	   )	typingctxr   r$   r   s      r   
init_dummyzETestLiteralDispatchWithCustomType.make_dummy_type.<locals>.init_dummy\  s1    ) ) ) IIKK((C<r   c                      fd} | S )Nc                                    S r   r1   )r   s   r   ctorzWTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.dummy_overload.<locals>.ctori  s    !z||#r   r1   )r   r   s    r   dummy_overloadzITestLiteralDispatchWithCustomType.make_dummy_type.<locals>.dummy_overloadg  s#    $ $ $ $ $ Kr   )objectr   Typer   r   StructModelr   r   )r!   r   r   r   r   r   s      @@@r   make_dummy_typez1TestLiteralDispatchWithCustomType.make_dummy_typeM  s   	 	 	 	 	F 	 	 		> 	> 	> 	> 	> 	> 	>
 	> 	> 	> 
		"	"	L 	L 	L 	L 	L 	L 	LV/ 	L 	L 
#	"	L
 
	  	  	  	  
	  
%	 	 	 	 
	 5!!r   c                    |                                  \  }t          |d          d             }t          fd            |                      d          d           t          fd            }|                     t
          j                  5 } |d           d d d            n# 1 swxY w Y   |                     dt          |j	                             d S )Nr#   c                     d }|S )Nc                      t          |          S r   r   r   s     r   r   zZTestLiteralDispatchWithCustomType.test_overload_method.<locals>.lit_overload.<locals>.implv  s     ||#r   r1   )r!   rY   r   s      r   lit_overloadzLTestLiteralDispatchWithCustomType.test_overload_method.<locals>.lit_overloadt  s    $ $ $ Kr   c                 B                 }|                     |           S r   )r#   )rY   r   r   s     r   	test_implzITestLiteralDispatchWithCustomType.test_overload_method.<locals>.test_impl{  s    A5588Or      c                       | dz             S rE   r1   )rY   r  s    r   insidezFTestLiteralDispatchWithCustomType.test_overload_method.<locals>.inside  s    9QU###r      zCannot request literal type.)
r   r   r   r   rm   r   r   ro   rp   rq   )r!   r   r  r  rs   r   r  s        @@r   test_overload_methodz6TestLiteralDispatchWithCustomType.test_overload_methodp  sH   //11	5	E	*	*	 	 
+	*	 
	 	 	 	 
	 	1q))) 
	$ 	$ 	$ 	$ 
	$ v122 	fF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4c&:J6K6KLLLLLs   B--B14B1N)r   r   r   r   r	  r1   r   r   r   r   L  s8        !" !" !"FM M M M Mr   r   __main__)numpyrk   r@   r   numba.tests.supportr   r   
numba.corer   r   r   numba.core.typingr
   numba.core.datamodelr   numba.core.extendingr   r   r   r   r   numba.misc.specialr   r   r   r   mainr1   r   r   <module>r     sw         ( ( ( ( ( (       - - - - - - - - - - ' ' ' ' ' ' ' ' ' ' ' '              ) ( ( ( ( (y- y- y- y- y-( y- y- y-x	@M @M @M @M @M @M @M @MF zHMOOOOO r   