§
    ƒÛgy"  ã                   ó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    úN/granary/edev/quantum/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ÔKˆOÝÔ)¨+Ñ6Ô6ˆIØ×ÒÑÔÐØ×+Ò+¨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Ñ"Ô"ˆØˆe�A�q‰kŒkˆØ�aŠxˆxˆx˜‰xŒxˆxˆxˆxr   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ˆØ×Ò˜c¥3Ñ'Ô'Ð'Ý˜cÑ"Ô"ˆØ×Ò˜˜˜q !™œ aÑ(Ô(Ð(ð ×&Ò&¥}µmÑDÔDˆØ×.Ò.¨uÑ5Ô5ˆØ×Ò˜c¥3Ñ'Ô'Ð'Ý˜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 )Néÿÿÿÿa  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œ|¨E°2Ñ6Ô6Ñ7Ô7ˆðõ  $¤.Ô"9Ð:Ñ:Ô:ñ;ˆõ 	Ô�sœ~¨t°T¸3¿:º:¹<¼<Ð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Ô 5°wÑ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	×Ò�˜Q™œ Ñ#Ô#Ð#Ø�ŠÐ+­S°°1´´Ñ->Ô->Ñ?Ô?Ð?åÔ$¨DÐ1Ñ1Ô1ð 	0°QÝÔ! (Ñ+Ô+Ð+Ø×"Ò"¥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´´Ñ->Ô->Ñ?Ô?Ð?Ø�Š�e�S Ô!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˜Ô-Ñ.Ô.ˆØà�Š�a�a‘c”c˜4Ñ Ô Ð Ø�Š�a�a‘c”c˜4Ñ Ô Ð Ð Ð 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ð %4ðR Ôð!ð !ñ Ôð!ð !ð !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                  ó   — d S r   rˆ   rˆ   r   r   Úfooz4TestWrappers.test_noinline_on_main_call.<locals>.fooØ   s   € àˆDr   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  € õ 
ð	ð 	ñ 
Œð	ð 	ˆ‰ŒˆØŒn˜QÔˆàŒ]˜3ÔˆØŒyÔ%×-Ò-¨c°5Ñ9Ô9ˆØ×!Ò! $Ñ'Ô'ˆØˆÝ”J˜r B™wÑ'Ô'ˆ	à× Ò  Ñ%Ô%×0Ò0Ñ2Ô2ˆØˆØð 	:ð 	:ˆAØ—o’o aÑ(Ô(ˆGØð :Ø×$Ò$ W§^¢^Ñ%5Ô%5°aÔ%8Ñ9Ô9Ð9øð 	×Ò�˜]Ñ+Ô+¨QÑ/Ô/Ð/à×Ò˜ qÔ)¨=¸Ô+;Ñ<Ô<Ð<à ×'Ò'¨°aÔ(8Ñ9Ô9ˆØ ˆÝ”J˜r B™wÑ'Ô'ˆ	å˜%‘”ð 	Bð 	BˆAØ—o’o aÑ(Ô(ˆGØð Ø#ŸNšNÑ,Ô,¨QÔ/�	Ø!ŸšÑ)Ô)×/Ò/°Ñ4Ô4�Øð ð �AØ! Q��Ø˜ð 'ð Ø��ðð —9’9Ð@ÑAÔAÐAr   N)rN   r‚   rƒ   r°   rˆ   r   r   rŠ   rŠ   Ò   s(   € € € € € ð-Bð -Bð -Bð -Bð -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/Bð /Bð /Bð /Bð /B�8ñ /Bô /Bð /Bðd ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   