
    J/PhX#                     B   d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z ddlZddlmZ ddlmZ ddlmZ ddlmZ dZdZd	Z ej        ej        ej        ej                  Z G d
 de          Z G d de          Zedk    r ej                     dS dS )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                       e Zd ZdZd Zd ZddZed             Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zej        d             ZdS )JITCPUCodegenTestCasez'
    Test the JIT code generation.
    c                 T    t          j                     t          d          | _        d S )Ntest_codegen)r   acquirer   codegenselfs    X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_codegen.pysetUpzJITCPUCodegenTestCase.setUp;   s$    $&&&$^44    c                 0    | ` t          j                     d S N)r   r   releaser   s    r   tearDownzJITCPUCodegenTestCase.tearDown?   s    L$&&&&&r   Nc                    | j                             d          }t          j        |          }|                                 |                    |           |rl| j                             d          }t          j        |          }|                                 |                    |           |                    |           |S )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_modulez$JITCPUCodegenTestCase.compile_moduleC   s    ,--.?@@%c**		*** 	9"l99:JKKO)+66I++I666''888r   c                     t          d          }|                    |          }|                    d          }|s
J |            t          |          } |dd          }|dk    s
J |            d S )Nother_codegensum         )r   unserialize_libraryget_pointer_to_functionctypes_sum_ty)clsstater   r!   ptrcfuncress          r   _check_unserialize_sumz,JITCPUCodegenTestCase._check_unserialize_sumP   sw    00--e44--e44Cc""eAqkkaxxxxxxxxr   c                    |                      t                    }|                    d          }|                     |t                     t          |          }|                      |dd          d           |                      t          t                    }|                    d          }|                     |t                     t          |          }|                      |dd          d           d S )Nr'   r(   r)   r*   )	r$   asm_sumr,   assertIsInstanceintr-   assertEqualasm_sum_outerasm_sum_inner)r   r!   r0   r1   library2s        r   test_get_pointer_to_functionz2JITCPUCodegenTestCase.test_get_pointer_to_functionZ   s    %%g..--e44c3'''c""q!a((( &&}mDD..u55c3'''c""q!a(((((r   c                     | j                                         }t          j        |           t	          d          }|                     |                                |           d S )Nxxx)r   magic_tuplepickledumpsr   r8   )r   tupcg2s      r   test_magic_tuplez&JITCPUCodegenTestCase.test_magic_tuplel   sX    l&&((SE""**C00000r   c                 0    |                      |           d S r   )r3   )r   r/   s     r   _check_serialize_unserializez2JITCPUCodegenTestCase._check_serialize_unserializet   s    ##E*****r   c                     t          j        t          j        |d                    }dt	          | j        j                  z  }t          j        t          j
        d||                                g           d S )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	b64encoder@   rA   dict	__class____name__
subprocess
check_callsys
executabledecode)r   r/   argcodes       r    _check_unserialize_other_processz6JITCPUCodegenTestCase._check_unserialize_other_processw   sk    v|E26677 $."9:::; 	s~tT3::<<HIIIIIr   c                     |                      t          t                    }|                                }|                     |           d S r   )r$   r9   r:   serialize_using_bitcoderF   r   r!   r/   s      r   "test_serialize_unserialize_bitcodez8JITCPUCodegenTestCase.test_serialize_unserialize_bitcode   sB    %%m]CC//11))%00000r   c                     |                      t          t                    }|                                }|                     |           d S r   )r$   r9   r:   rX   rV   rY   s      r   &test_unserialize_other_process_bitcodez<JITCPUCodegenTestCase.test_unserialize_other_process_bitcode   sB    %%m]CC//11--e44444r   c                     |                      t          t                    }|                                 |                                }|                     |           d S r   )r$   r9   r:   enable_object_cachingserialize_using_object_coderF   rY   s      r   &test_serialize_unserialize_object_codez<JITCPUCodegenTestCase.test_serialize_unserialize_object_code   sT    %%m]CC%%'''3355))%00000r   c                     |                      t          t                    }|                                 |                                }|                     |           d S r   )r$   r9   r:   r^   r_   rV   rY   s      r   *test_unserialize_other_process_object_codez@JITCPUCodegenTestCase.test_unserialize_other_process_object_code   sT    %%m]CC%%'''3355--e44444r   c                    |                      t          t                    }|                                 |                                }t          j        d          5 }|                                }|                                }|	                    d           ddd           n# 1 swxY w Y   | 
                    t          |          d           t          d          }|                    |          }t          j        d          5 }t          j        d           |                     ||                                           ddd           n# 1 swxY w Y   | 
                    t          |          d           |                     d	t#          |d         j                             t          j        d          5 }t          j        d           |                     |                                |           ddd           n# 1 swxY w Y   | 
                    t          |          d           |                     d	t#          |d         j                             t          j        d          5 }t          j        d           |                     t(                    5 }|	                    d           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   | 
                    t          |          d           |                     d	t#          |d         j                             |                     dt#          |j                             dS )
z	
        T)recordr'   Nr   r&   always   zInspection disabled)r$   r9   r:   r^   r_   warningscatch_warningsget_llvm_strget_asm_strget_function_cfgr8   lenr   r+   simplefilterassertNotEqualassertInstrmessageassertRaises	NameError	exception)r   r!   r/   wold_llvmold_asmr   raisess           r   test_cache_disabled_inspectionz4JITCPUCodegenTestCase.test_cache_disabled_inspection   sG    %%m]CC%%'''3355 $D111 	,Q++--H))++G$$U+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	Q###  00--e44 $D111 	BQ!(+++'*>*>*@*@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Q###+S1->->???$D111 	@Q!(+++ 3 3 5 5w???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	Q###+S1->->???$D111 	0Q!(+++""9-- 0((///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	Q###+S1->->???eS!12233333sl   >B((B,/B,=EEE	=HHH/K+2KK+K	K+K	K++K/2K/c                    |                      t          t                    }|                                 |                                 |                                 t          j        |          }t          j        |j                  }~| 	                     |            d            | 	                     |            d            d S r   )
r$   r9   r:   r^   rX   r_   weakrefref_final_moduleassertIs)r   r!   uvs       r   test_library_lifetimez+JITCPUCodegenTestCase.test_library_lifetime   s    %%m]CC%%''''')))++---K  K-..aacc4   aacc4     r   r   )rN   
__module____qualname____doc__r   r   r$   classmethodr3   r<   rD   rF   rV   rZ   r\   r`   rb   ry   unittestexpectedFailurer    r   r   r   r   6   s        5 5 5' ' '      [) ) )$1 1 1+ + +J J J1 1 1
5 5 5
1 1 15 5 5%4 %4 %4R ! ! ! ! !r   r   c                       e Zd Zd ZdS )TestWrappersc                    t           d             } |             |j        d         }|j        |         }|j        j                            dd          }d                    |          }d}t          j        ||z             }|	                    |          
                                }g }	|D ]F}
|                    |
          }|r-|	                    |                                d                    G|                     t          |	          d           |                     |	d         |	d                    d	                    |	d                   }d
}t          j        ||z             }t!          |          D ]i}
|                    |
          }|rP|                                d         }|                                                    d          }|D ]}d|v r n	f d S j|                     d          S )Nc                  "    t          dg          S )Nrf   )listr   r   r   fooz4TestWrappers.test_noinline_on_main_call.<locals>.foo   s    99r   r   $z\$z
.*call.*{}z.*(#[0-9]+).*r(   rf   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groupsr8   rl   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_callz'TestWrappers.test_noinline_on_main_call   s    
	 	 
	 	nQ]3y%--c599!!$''JrBw''	  %%0022 	: 	:Aooa((G :$$W^^%5%5a%8999 	]++Q///q)=+;<<< ''a(899 JrBw''	% 	B 	BAooa((G #NN,,Q/	!))//44  A!Q '  99@AAAr   N)rN   r   r   r   r   r   r   r   r      s(        0B 0B 0B 0B 0Br   r   __main__)r   rg   rJ   ctypesr@   r   rO   rQ   r{   llvmlite.bindingbindingr   r   numbar   numba.core.codegenr   numba.core.compiler_lockr   numba.tests.supportr   r5   r:   r9   	CFUNCTYPEc_intr-   r   r   rN   mainr   r   r   <module>r      s~   
     				     



               , , , , , , 9 9 9 9 9 9 ( ( ( ( ( ( ! v|V\JJY! Y! Y! Y! Y!H Y! Y! Y!x2B 2B 2B 2B 2B8 2B 2B 2Bj zHMOOOOO r   