
    xKg-                         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j4                          yy)    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y)TestLiteralDispatchc                     t         d        }|D ]  }| j                   ||      |        t        ||j                        D ]$  \  }}| j                  |d   j                  |       & y )Nc                     t        |       S Nr   xs    e/home/alanp/www/video.onchill/myenv/lib/python3.12/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   si    		  
	   CSXs+   L#..9HCSV1137 :r   c                 P    | j                  ddg       | j                  ddg       y )N{   A  abccb123)r%   )r!   s    r   test_literal_basicz&TestLiteralDispatch.test_literal_basic   s'      #s,  %!12r   c                    t         d        t         fd       }d\  }}| j                   |||      |dz  |z          j                  \  }| j                  |d   t        j                  |             |j                  \  }| j                  |d   t        j                  |             | j                  |d   t        j                         y )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&       q6A: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.NN	U]]1%56NN	U]]1%56  U]];r   c                     dd l t        fd       }| j                   |d      d       | j                  |j                  d   d   t	        j
                  d             y )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   sU    		& 
	& 	S3'*1-u}}S/ABr   c                     d } |d       \  }} |t               \  }}| j                   |dd       |dd             | j                  |j                  d   d   j                  d       | j                  |j                  d   d   j                  d       | j                   |dd       |dd             | j                  |j                  d   d   j                  d       | j                  |j                  d   d   j                  d       y )	Nc                 6    | fd       | fd       fS )Nc                 0    | 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%    q5 L9QUE222r   c                 B    | 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   s+    q5$U++9QUE222r   r1   )decorrH   rI   s    @@r   get_functionszHTestLiteralDispatch.test_mutual_recursion_literal.<locals>.get_functions>   s6    3 3
 3 3
 i''r   c                     | S r   r1   r   s    r   <lambda>zCTestLiteralDispatch.test_mutual_recursion_literal.<locals>.<lambda>M   s    qr   
      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=   s    	( (5['A$},T2	92r*M"b,AB--a03AA2F--a03AA2F2r*M"b,AB--a03AA2F--a03AA2Fr   c                    t         fd       }t         d        t        ddd      } |di |} d di |}| j                  ||       |j                  \  }| j                  |d   t	        j
                  d             y )	Nc                      | |      S r   r1   abcinners      r   r   z>TestLiteralDispatch.test_literal_nested_multi_arg.<locals>.fooY       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!$mFm'262f%NN	U]]1%56r   c                 ,   t         fd       }t         d        t        j                  d      }| j                  t        j
                        5 } |dd|       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)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    		 
	 
	$ 
	$ iimv889V!qC  :os6+;+;'<= :9s   B

Bc                    t         fd       }t         d        t        ddd      } |di |} d di |}| j                  ||       |j                  \  \  }}}| j	                  |t
        j                         | j                  |t
        j                         | j                  |j                  d       | j                  |t
        j                         | j                  |j                  d       y )	Nc                 *     | |       ||      z   S r   r1   rX   s      r   r   z/TestLiteralDispatch.test_biliteral.<locals>.foox   s    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!$mFm/:6:f%%(^^"	!&&&  7femm4--q1femm4--q1r   c                 z   t         d        | j                  t        j                        5   ddd       d d d        t         fd       }| j                  t        j                        5 } |dd       d d d        | j                  dt        j                               y # 1 sw Y   nxY w# 1 sw Y   ;xY w)Nc                     t        |      S r   r   )rY   argss     r   r   z7TestLiteralDispatch.test_literally_varargs.<locals>.foo   s    T?"r   r7   r.   r5   c                      | |       y r   r1   rY   rZ   r   s     r   r3   z7TestLiteralDispatch.test_literally_varargs.<locals>.bar   s    1Ir   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   s    		# 
	# v8891aL : 
	 
	 v112f1I 3)  !	
 :9 32s   B%-
B1%B.1B:c                 0    t         dd       } |d       y )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   s     
	% 
	%ar   c                 L    t         dd       t         fd       } |d       y )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   s4     
	% 
	% 
	 
	 	Ar   c                     t         d        } |d      }| j                  ||j                  d             | j                  |j                  d   d   t
        j                         y )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   sZ    		& 
	& #hckk#./cnnQ/2EMMBr   c                     t         d        }| j                  t        j                        5 } |dd       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)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12f1I 3-  !	
 32s   
A$$A-c                     t         d         dd      }| j                  |j                  dd             t         fd       } |       }| j                  ||j                                y )Nc                 :    d}| t        |      z   t        |      z   S )Ni  r   )rY   rZ   vs      r   r   z5TestLiteralDispatch.test_inlined_literal.<locals>.foo   s    Ay|#il22r   r7   r.   c                       d} d} ||       S )Nd   	   r   r1   r   s     r   r3   z5TestLiteralDispatch.test_inlined_literal.<locals>.bar   s    AAa= r   )r   r   r   )r!   re   r3   r   s      @r   test_inlined_literalz(TestLiteralDispatch.test_inlined_literal   sn    		3 
	3 !Qickk!Q/0		! 
	!
 eckkm,r   c                    t         fd       }t         d        t        ddd      } |di |} d di |}| j                  ||       |j                  \  \  }}}| j	                  |t
        j                         | j                  |t
        j                         | j                  |j                  d       | j                  |t
        j                         | j                  |j                  d       y )	Nc                 &      fd} ||      S )Nc                 4    t        |       d       z  z   S NrO   r   )drY   rZ   r\   s    r   closurezGTestLiteralDispatch.test_aliased_variable.<locals>.foo.<locals>.closure   s     |b5A;&666r   r1   )rY   rZ   r[   r   r\   s   ``  r   r   z6TestLiteralDispatch.test_aliased_variable.<locals>.foo   s    7 1: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"2r   r1   ry   r{   s	           @r   test_aliased_variablez)TestLiteralDispatch.test_aliased_variable   s    		 
	 
	$ 
	$ Q!$mFm2=f=f%%(^^"	!&&&  7femm4--q1femm4--q1r   c                 p   d t              fd       t        fd       }d}d} |||      }| j                  |||z          |j                  d   \  }}| j	                  |t
        j                         | j                  |j                  |       | j                  |t
        j                         y )Nc                     | |z   S r   r1   r_   s     r   do_thisz;TestLiteralDispatch.test_overload_explicit.<locals>.do_this       q5Lr   c                 `    t        dg      j                        j                  | |       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%%r   c                      | |      S r   r1   rY   rZ   r   s     r   r   z7TestLiteralDispatch.test_overload_explicit.<locals>.foo       1a= 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    	 
'		& 
	& 
	! 
	! 1IAE">>!,femm4--q1  7r   c                   	 d t         d        	t              	fd       }t         fd       }d}d} |||      }| j                  |||z          |j                  d   \  }}| j	                  |t
        j                         | j                  |j                  |       | j                  |t
        j                         y )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                 D    t        | t        j                        rfdS y )Nc                      | |      S r   r1   r   r2   r   s     r   rN   zPTestLiteralDispatch.test_overload_implicit.<locals>.ov_do_this.<locals>.<lambda>  s    F1aLr   )
isinstancer   Integerr   s     r   r   z>TestLiteralDispatch.test_overload_implicit.<locals>.ov_do_this  s    !U]]+00 ,r   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
 
	! 
	! 1IAE">>!,femm4--q1  7r   c                 .   d t         d        t              fd       }t         fd       }| j                  t        j                        5 } |dd       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)	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                 p    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    !!Q<'r   )r   r   IntegerLiteralr   NumbaValueError)r   r2   r   r   s      r   r   z@TestLiteralDispatch.test_overload_error_loop.<locals>.ov_do_this5  s0    !U112 ,,V44(r   c                 (     | t        |            S r   r   r   s     r   r   z9TestLiteralDispatch.test_overload_error_loop.<locals>.foo@  s    1il++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)  s    
	 
	$ 
	$ 
'		 
	 
	, 
	,
 v334# 57&**+	- 54s   BB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      s    
83<"	CG67 >2*
&   
 
C

-&2.808< -r   r   c                       e Zd Zd Zd Zy)!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y)@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                 &    t         |   d       y )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                 ,    g }t         |   |||       y r   r   )r!   dmmfe_typemembersDummyTypeModelr   s       r   r   zRTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.DummyTypeModel.__init__X  s    nd4S'7Kr   r   )r   r   s   @r   r   r   V  s    L Lr   r   c                 2    d }t                      }||fS )Nc                 n     t        j                  |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^  s8    +33))++2G= ((r   r	   )	typingctxr   r$   r   s      r   
init_dummyzETestLiteralDispatchWithCustomType.make_dummy_type.<locals>.init_dummy\  s     ) IK(C<r   c                      fd} | S )Nc                               S r   r1   )r   s   r   ctorzWTestLiteralDispatchWithCustomType.make_dummy_type.<locals>.dummy_overload.<locals>.ctori  s    !|#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V// 	L 
#	L
 
	  
	  
%	 
	 5!!r   c                 |   | j                         \  }t        |d      d        }t        fd       | j                   d      d       t        fd       }| j	                  t
        j                        5 } |d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)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                 4            }|j                  |       S r   )r#   )rY   r   r   s     r   	test_implzITestLiteralDispatchWithCustomType.test_overload_method.<locals>.test_impl{  s    A558Or      c                      | dz         S rE   r1   )rY   r  s    r   insidezFTestLiteralDispatchWithCustomType.test_overload_method.<locals>.inside  s    Q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  s    //1	5	E	*	 
+	 
	 
	 	1q) 
	$ 
	$ v112f1I 3 	4c&:J:J6KL 32s   ;	B22B;N)r   r   r   r   r	  r1   r   r   r   r   L  s    !"F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     si       (  - - ' '  )y-( y-x	@M @MF zHMMO r   