Ë
    èÿæiX#  ã                   óV  — 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j0                  ej2                  ej2                  ej2                  «      Z G d
„ de«      Z G d„ de«      Zedk(  r ej<                  «        yy)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y)ÚJITCPUCodegenTestCasez'
    Test the JIT code generation.
    c                 óL   — t        j                  «        t        d«      | _        y )NÚtest_codegen)r   Úacquirer   Úcodegen©Úselfs    úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_codegen.pyÚsetUpzJITCPUCodegenTestCase.setUp;   s   € Ü×$Ñ$Ô&Ü$ ^Ó4ˆ�ó    c                 ó0   — | ` t        j                  «        y ©N)r   r   Úreleaser   s    r   ÚtearDownzJITCPUCodegenTestCase.tearDown?   s   € ØˆLÜ×$Ñ$Õ&r   Nc                 óp  — | j                   j                  d«      }t        j                  |«      }|j	                  «        |j                  |«       |rb| j                   j                  d«      }t        j                  |«      }|j	                  «        |j                  |«       |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Ó*ˆ	Ø×ÑÔØ×Ñ 	Ô*ÙØ"Ÿl™l×9Ñ9Ð:JÓKˆOÜ×)Ñ)¨+Ó6ˆIØ×ÑÔØ×+Ñ+¨IÔ6Ø×'Ñ'¨Ô8Øˆr   c                 ó°   — t        d«      }|j                  |«      }|j                  d«      }|sJ |«       ‚t        |«      } |dd«      }|dk(  sJ |«       ‚y )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   s]   € ä Ó0ˆØ×-Ñ-¨eÓ4ˆØ×-Ñ-¨eÓ4ˆÙˆ�C‹ˆsÜ˜cÓ"ˆÙ�A�q‹kˆØ�aŠxÐ˜Ó‰xr   c                 óŽ  — | j                  t        «      }|j                  d«      }| j                  |t        «       t        |«      }| j                   |dd«      d«       | j                  t        t        «      }|j                  d«      }| j                  |t        «       t        |«      }| j                   |dd«      d«       y )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ˆØ×Ñ˜c¤3Ô'Ü˜cÓ"ˆØ×Ñ™˜q !› aÔ(ð ×&Ñ&¤}´mÓDˆØ×.Ñ.¨uÓ5ˆØ×Ñ˜c¤3Ô'Ü˜cÓ"ˆØ×Ñ™˜q !› aÕ(r   c                 ó¸   — | j                   j                  «       }t        j                  |«       t	        d«      }| j                  |j                  «       |«       y )NÚxxx)r   Úmagic_tupleÚpickleÚdumpsr   r8   )r   ÚtupÚcg2s      r   Útest_magic_tuplez&JITCPUCodegenTestCase.test_magic_tuplel   sA   € Ø�l‰l×&Ñ&Ó(ˆÜ�‰�SÔÜ˜EÓ"ˆØ×Ñ˜Ÿ™Ó*¨CÕ0r   c                 ó&   — | j                  |«       y 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||j                  «       g«       y )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   s`   € Ü×ÑœvŸ|™|¨E°2Ó6Ó7ˆðô  $§.¡.×"9Ñ"9Ô:ñ;ˆô 	×ÑœsŸ~™~¨t°T¸3¿:¹:»<ÐHÕIr   c                 óz   — | j                  t        t        «      }|j                  «       }| j	                  |«       y r   )r$   r9   r:   Úserialize_using_bitcoderF   ©r   r!   r/   s      r   Ú"test_serialize_unserialize_bitcodez8JITCPUCodegenTestCase.test_serialize_unserialize_bitcode„   s0   € Ø×%Ñ%¤m´]ÓCˆØ×/Ñ/Ó1ˆØ×)Ñ)¨%Õ0r   c                 óz   — | j                  t        t        «      }|j                  «       }| j	                  |«       y r   )r$   r9   r:   rX   rV   rY   s      r   Ú&test_unserialize_other_process_bitcodez<JITCPUCodegenTestCase.test_unserialize_other_process_bitcode‰   s0   € Ø×%Ñ%¤m´]ÓCˆØ×/Ñ/Ó1ˆØ×-Ñ-¨eÕ4r   c                 óš   — | j                  t        t        «      }|j                  «        |j	                  «       }| j                  |«       y 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Ž   s<   € Ø×%Ñ%¤m´]ÓCˆØ×%Ñ%Ô'Ø×3Ñ3Ó5ˆØ×)Ñ)¨%Õ0r   c                 óš   — | j                  t        t        «      }|j                  «        |j	                  «       }| j                  |«       y r   )r$   r9   r:   r^   r_   rV   rY   s      r   Ú*test_unserialize_other_process_object_codez@JITCPUCodegenTestCase.test_unserialize_other_process_object_code”   s<   € Ø×%Ñ%¤m´]ÓCˆØ×%Ñ%Ô'Ø×3Ñ3Ó5ˆØ×-Ñ-¨eÕ4r   c                 óö  — | j                  t        t        «      }|j                  «        |j	                  «       }t        j                  d¬«      5 }|j                  «       }|j                  «       }|j                  d«       ddd«       | j                  t        «      d«       t        d«      }|j                  |«      }t        j                  d¬«      5 }t        j                  d«       | j                  |j                  «       «       ddd«       | j                  t        |«      d«       | j!                  d	t#        |d   j$                  «      «       t        j                  d¬«      5 }t        j                  d«       | j                  |j                  «       «       ddd«       | j                  t        |«      d«       | j!                  d	t#        |d   j$                  «      «       t        j                  d¬«      5 }t        j                  d«       | j'                  t(        «      5 }|j                  d«       ddd«       ddd«       | j                  t        |«      d«       | j!                  d	t#        |d   j$                  «      «       | j!                  dt#        j*                  «      «       y# 1 sw Y   �Œ;xY w# 1 sw Y   �Œ½xY w# 1 sw Y   �Œ3xY w# 1 sw Y   Œ¡xY w# 1 sw Y   Œ¥xY w)
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š   s?  € ð ×%Ñ%¤m´]ÓCˆØ×%Ñ%Ô'Ø×3Ñ3Ó5ˆô ×$Ñ$¨DÕ1°QØ×+Ñ+Ó-ˆHØ×)Ñ)Ó+ˆGØ×$Ñ$ UÔ+÷ 2ð 	×Ñœ˜Q› Ô#ô   Ó0ˆØ×-Ñ-¨eÓ4ˆô ×$Ñ$¨DÕ1°QÜ×!Ñ! (Ô+Ø×Ñ ¨'×*>Ñ*>Ó*@ÔA÷ 2ð 	×Ñœ˜Q› Ô#Ø�‰Ð+¬S°°1±·±Ó->Ô?ä×$Ñ$¨DÕ1°QÜ×!Ñ! (Ô+Ø×Ñ × 3Ñ 3Ó 5°wÔ?÷ 2ð 	×Ñœ˜Q› Ô#Ø�‰Ð+¬S°°1±·±Ó->Ô?ä×$Ñ$¨DÕ1°QÜ×!Ñ! (Ô+Ø×"Ñ"¤9Ô-°Ø×(Ñ(¨Ô/÷ .÷ 2ð 	×Ñœ˜Q› Ô#Ø�‰Ð+¬S°°1±·±Ó->Ô?Ø�‰�eœS ×!1Ñ!1Ó2Õ3÷; 2Ñ1ú÷ 2Ñ1ú÷ 2Ñ1ú÷ .Ð-ú÷ 2Ð1úsH   Á2J<Ã6K	Å/6KÈ+K/È1K#ÉK/Ê<KË	KËK Ë#K,	Ë(K/Ë/K8c                 ó^  — | j                  t        t        «      }|j                  «        |j	                  «        |j                  «        t        j                  |«      }t        j                  |j                  «      }~| j                   |«       d «       | j                   |«       d «       y 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ˆà×%Ñ%Ô'Ø×'Ñ'Ô)Ø×+Ñ+Ô-Ü�K‰K˜Ó ˆÜ�K‰K˜×-Ñ-Ó.ˆØà�‰‘a“c˜4Ô Ø�‰‘a“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   ss   „ ñò5ò'óð ñó ðò)ò$1ò+òJò1ò
5ò
1ò5ò%4ðR ×Ññ!ó ñ!r   r   c                   ó   — e Zd Zd„ Zy)ÚTestWrappersc                 ón  — t         d„ «       } |«        |j                  d   }|j                  |   }|j                  j                  j                  dd«      }dj                  |«      }d}t        j                  ||z   «      }|j                  |«      j                  «       }g }	|D ]8  }
|j                  |
«      }|sŒ|	j                  |j                  «       d   «       Œ: | j                  t        |	«      d«       | j                  |	d   |	d   «       d	j                  |	d   «      }d
}t        j                  ||z   «      }t!        |«      D ]V  }
|j                  |
«      }|sŒ|j                  «       d   }|j#                  «       j%                  d«      }|D ]	  }d|v sŒ  y  ŒX | j'                  d«      S )Nc                  ó   — t        dg«      S )Nrf   )Úlistrˆ   r   r   Úfooz4TestWrappers.test_noinline_on_main_call.<locals>.fooÛ   s   € ä˜˜“9Ð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£  € ô 
ñ	ó 
ð	ñ 	ŒØ�n‰n˜QÑˆà�]‰]˜3ÑˆØ�y‰y×%Ñ%×-Ñ-¨c°5Ó9ˆØ×!Ñ! $Ó'ˆØˆÜ—J‘J˜r B™wÓ'ˆ	à× Ñ  Ó%×0Ñ0Ó2ˆØˆÛˆAØ—o‘o aÓ(ˆGÚØ×$Ñ$ W§^¡^Ó%5°aÑ%8Õ9ð ð 	×Ñœ˜]Ó+¨QÔ/à×Ñ˜ qÑ)¨=¸Ñ+;Ô<à ×'Ñ'¨°aÑ(8Ó9ˆØ ˆÜ—J‘J˜r B™wÓ'ˆ	ä˜%–ˆAØ—o‘o aÓ(ˆGÚØ#ŸN™NÓ,¨QÑ/�	Ø!Ÿ™Ó)×/Ñ/°Ó4�Û�AØ! Q’Øñ ð ð ð !ð —9‘9Ð@ÓAÐAr   N)rN   r‚   rƒ   r±   rˆ   r   r   rŠ   rŠ   Ò   s   „ ó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Ý (ð€ð€ð€ð !�× Ñ  §¡¨v¯|©|¸V¿\¹\ÓJ€ôY!˜Hô Y!ôx2B�8ô 2Bðj ˆzÒØ€H‡M�M…Oð r   