
    shX#                     X   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SrSrS	r\R0                  " \R2                  \R2                  \R2                  5      r " S
 S\5      r " S S\5      r\S:X  a  \R<                  " 5         gg)z
Tests for numba.core.codegen.
    N)njit)JITCPUCodegen)global_compiler_lock)TestCasezb
    define i32 @sum(i32 %.1, i32 %.2) {
      %.3 = add i32 %.1, %.2
      ret i32 %.3
    }
    z
    define i32 @"__main__.ising_element_update$1.array(int8,_2d,_C).int64.int64"(i32 %.1, i32 %.2) {
      %.3 = add i32 %.1, %.2
      ret i32 %.3
    }
a  
    declare i32 @"__main__.ising_element_update$1.array(int8,_2d,_C).int64.int64"(i32 %.1, i32 %.2)

    define i32 @sum(i32 %.1, i32 %.2) {
      %.3 = call i32 @"__main__.ising_element_update$1.array(int8,_2d,_C).int64.int64"(i32 %.1, i32 %.2)
      ret i32 %.3
    }
c                       \ rS rSrSrS rS rSS jr\S 5       r	S r
S	 rS
 rS rS rS rS rS rS r\R(                  S 5       rSrg)JITCPUCodegenTestCase6   z
Test the JIT code generation.
c                 N    [         R                  " 5         [        S5      U l        g )Ntest_codegen)r   acquirer   codegenselfs    l/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_codegen.pysetUpJITCPUCodegenTestCase.setUp;   s    $$&$^4    c                 2    U ? [        R                  " 5         g N)r   r   releaser   s    r   tearDownJITCPUCodegenTestCase.tearDown?   s    L$$&r   Nc                 ~   U R                   R                  S5      n[        R                  " U5      nUR	                  5         UR                  U5        U(       ac  U R                   R                  S5      n[        R                  " U5      nUR	                  5         UR                  U5        UR                  U5        U$ )Ncompiled_modulelinking_module)r   create_libraryllparse_assemblyverifyadd_llvm_moduleadd_linking_library)r   asmlinking_asmlibrary	ll_modulelinking_librarys         r   compile_module$JITCPUCodegenTestCase.compile_moduleC   s    ,,--.?@%%c*		*"ll99:JKO))+6I++I6''8r   c                     [        S5      nUR                  U5      nUR                  S5      nU(       d   U5       e[        U5      nU" SS5      nUS:X  d   U5       eg )Nother_codegensum         )r   unserialize_libraryget_pointer_to_functionctypes_sum_ty)clsstater   r$   ptrcfuncress          r   _check_unserialize_sum,JITCPUCodegenTestCase._check_unserialize_sumP   s]    0--e4--e4Csc"Aqkaxxr   c                    U R                  [        5      nUR                  S5      nU R                  U[        5        [        U5      nU R                  U" SS5      S5        U R                  [        [        5      nUR                  S5      nU R                  U[        5        [        U5      nU R                  U" SS5      S5        g )Nr+   r,   r-   r.   )	r'   asm_sumr0   assertIsInstanceintr1   assertEqualasm_sum_outerasm_sum_inner)r   r$   r4   r5   library2s        r   test_get_pointer_to_function2JITCPUCodegenTestCase.test_get_pointer_to_functionZ   s    %%g.--e4c3'c"q!a( &&}mD..u5c3'c"q!a(r   c                     U R                   R                  5       n[        R                  " U5        [	        S5      nU R                  UR                  5       U5        g )Nxxx)r   magic_tuplepickledumpsr   r=   )r   tupcg2s      r   test_magic_tuple&JITCPUCodegenTestCase.test_magic_tuplel   sA    ll&&(SE"*C0r   c                 &    U R                  U5        g r   )r7   )r   r3   s     r   _check_serialize_unserialize2JITCPUCodegenTestCase._check_serialize_unserializet   s    ##E*r   c                    [         R                  " [        R                  " US5      5      nS[	        U R
                  R                  S9-  n[        R                  " [        R                  SX2R                  5       /5        g )Na  if 1:
            import base64
            import pickle
            import sys
            from numba.tests.test_codegen import %(test_class)s

            state = pickle.loads(base64.b64decode(sys.argv[1]))
            %(test_class)s._check_unserialize_sum(state)
            )
test_classz-c)base64	b64encoderF   rG   dict	__class____name__
subprocess
check_callsys
executabledecode)r   r3   argcodes       r    _check_unserialize_other_process6JITCPUCodegenTestCase._check_unserialize_other_processw   s^    v||E267 $.."9"9:; 	s~~tT::<HIr   c                 z    U R                  [        [        5      nUR                  5       nU R	                  U5        g r   )r'   r>   r?   serialize_using_bitcoderM   r   r$   r3   s      r   "test_serialize_unserialize_bitcode8JITCPUCodegenTestCase.test_serialize_unserialize_bitcode   s0    %%m]C//1))%0r   c                 z    U R                  [        [        5      nUR                  5       nU R	                  U5        g r   )r'   r>   r?   ra   r^   rb   s      r   &test_unserialize_other_process_bitcode<JITCPUCodegenTestCase.test_unserialize_other_process_bitcode   s0    %%m]C//1--e4r   c                     U R                  [        [        5      nUR                  5         UR	                  5       nU R                  U5        g r   )r'   r>   r?   enable_object_cachingserialize_using_object_coderM   rb   s      r   &test_serialize_unserialize_object_code<JITCPUCodegenTestCase.test_serialize_unserialize_object_code   s<    %%m]C%%'335))%0r   c                     U R                  [        [        5      nUR                  5         UR	                  5       nU R                  U5        g r   )r'   r>   r?   ri   rj   r^   rb   s      r   *test_unserialize_other_process_object_code@JITCPUCodegenTestCase.test_unserialize_other_process_object_code   s<    %%m]C%%'335--e4r   c                    U R                  [        [        5      nUR                  5         UR	                  5       n[
        R                  " SS9 nUR                  5       nUR                  5       nUR                  S5        SSS5        U R                  [        W5      S5        [        S5      nUR                  U5      n[
        R                  " SS9 n[
        R                  " S5        U R                  WUR                  5       5        SSS5        U R                  [        U5      S5        U R!                  S	[#        US   R$                  5      5        [
        R                  " SS9 n[
        R                  " S5        U R                  UR                  5       W5        SSS5        U R                  [        U5      S5        U R!                  S	[#        US   R$                  5      5        [
        R                  " SS9 n[
        R                  " S5        U R'                  [(        5       nUR                  S5        SSS5        SSS5        U R                  [        U5      S5        U R!                  S	[#        US   R$                  5      5        U R!                  S[#        WR*                  5      5        g! , (       d  f       GN== f! , (       d  f       GN= f! , (       d  f       GNA= f! , (       d  f       N= f! , (       d  f       N= f)
z	
        T)recordr+   Nr   r*   always   zInspection disabled)r'   r>   r?   ri   rj   warningscatch_warningsget_llvm_strget_asm_strget_function_cfgr=   lenr   r/   simplefilterassertNotEqualassertInstrmessageassertRaises	NameError	exception)r   r$   r3   wold_llvmold_asmr   raisess           r   test_cache_disabled_inspection4JITCPUCodegenTestCase.test_cache_disabled_inspection   s?    %%m]C%%'335 $$D1Q++-H))+G$$U+ 2 	Q#  0--e4 $$D1Q!!(+'*>*>*@A 2 	Q#+S1->?$$D1Q!!(+ 3 3 5w? 2 	Q#+S1->?$$D1Q!!(+""9-((/ . 2 	Q#+S1->?eS!1!123; 21 21 21 .- 21sH   2J77K	*7K ,K>,K->K>7
K	
K
K*-
K;	7K>>
Lc                 b   U R                  [        [        5      nUR                  5         UR	                  5         UR                  5         [        R                  " U5      n[        R                  " UR                  5      nAU R                  U" 5       S 5        U R                  U" 5       S 5        g r   )
r'   r>   r?   ri   ra   rj   weakrefref_final_moduleassertIs)r   r$   uvs       r   test_library_lifetime+JITCPUCodegenTestCase.test_library_lifetime   s}    %%m]C%%''')++-KK KK--.ac4 ac4 r   )r   r   )rV   
__module____qualname____firstlineno____doc__r   r   r'   classmethodr7   rA   rJ   rM   r^   rc   rf   rk   rn   r   unittestexpectedFailurer   __static_attributes__ r   r   r   r   6   ss    5'  )$1+J1
5
15%4R ! !r   r   c                       \ rS rSrS rSrg)TestWrappers   c                    [         S 5       nU" 5         UR                  S   nUR                  U   nUR                  R                  R                  SS5      nSR                  U5      nSn[        R                  " XV-   5      nUR                  U5      R                  5       n/ n	U H?  n
UR                  U
5      nU(       d  M  U	R                  UR                  5       S   5        MA     U R                  [        U	5      S5        U R                  U	S   U	S   5        S	R                  U	S   5      nS
n[        R                  " XV-   5      n[!        U5       Hb  n
UR                  U
5      nU(       d  M  UR                  5       S   nUR#                  5       R%                  S5      nU H  nSU;   d  M    O   Mb    g    U R'                  S5      $ )Nc                      [        S/5      $ )Nrs   )listr   r   r   foo4TestWrappers.test_noinline_on_main_call.<locals>.foo   s    9r   r   $z\$z
.*call.*{}z.*(#[0-9]+).*r,   rs   z^attributes\s+{}z\s+=\s+{(.*)}.*$ noinlinez!Metadata did not match 'noinline')r   
signatures	overloadsfndescmangled_namereplaceformatrecompileinspect_llvm
splitlinesmatchappendgroupsr=   ry   reversedstripsplitfail)r   r   sigolnamep1p2	call_sitelinesmeta_data_idxlmatched	attr_site	meta_datalmetaxs                   r   test_noinline_on_main_call'TestWrappers.test_noinline_on_main_call   s    
	 
	 	nnQ]]3yy%%--c59!!$'JJrw'	  %002Aooa(Gw$$W^^%5a%89  	]+Q/q)=+;< ''a(89 JJrw'	%Aooa(Gw#NN,Q/	!)//4A!Q   ! 99@AAr   r   N)rV   r   r   r   r   r   r   r   r   r   r      s    0Br   r   __main__)r   rt   rR   ctypesrF   r   rW   rY   r   llvmlite.bindingbindingr   r   numbar   numba.core.codegenr   numba.core.compiler_lockr   numba.tests.supportr   r:   r?   r>   	CFUNCTYPEc_intr1   r   r   rV   mainr   r   r   <module>r      s   
     	  
     , 9 (   v||V\\JY!H Y!x2B8 2Bj zMMO r   