Ë
    èÿæi -  ã                   ó´  — d dl Z d dlZd dlmZmZmZmZ d dlm	Z	m
Z
 d dlmZmZmZmZ d dlmZmZ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m Z m!Z!m"Z"m#Z#m$Z$ d d	l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m,Z,m0Z0m1Z1 d d
l2m3Z3m4Z4m5Z5 d dl6Z6 e5dd¬«       G d„ de3«      «       Z7d„ Z8 G d„ dejr                  «      Z: G d„ de«      Z;e<dk(  r e6jz                  «        yy)é    N)ÚTestCaseÚoverride_configÚcaptured_stdoutÚskip_parfors_unsupported)ÚjitÚnjit)ÚtypesÚirÚpostprocÚcompiler)ÚguardÚfind_callnameÚ
find_constÚget_definitionÚsimplify_CFG)ÚCPUDispatcher)Úinline_closure_call)
ÚExtractByteCodeÚTranslateByteCodeÚ	FixupArgsÚIRProcessingÚDeadBranchPruneÚRewriteSemanticConstantsÚGenericRewritesÚWithLiftingÚ
PreserveIRÚInlineClosureLikes)ÚNopythonTypeInferenceÚAnnotateTypesÚNopythonRewritesÚPreParforPassÚ
ParforPassÚDumpParforDiagnosticsÚNativeLoweringÚNativeParforLoweringÚIRLegalizationÚNoPythonBackendr$   ÚParforFusionPassÚParforPreLoweringPass)ÚFunctionPassÚPassManagerÚregister_passFT©Úanalysis_onlyÚmutates_CFGc                   ó   — e Zd ZdZd„ Zd„ Zy)ÚInlineTestPassÚinline_test_passc                 ó.   — t        j                  | «       y ©N©r*   Ú__init__©Úselfs    ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_inlining.pyr6   zInlineTestPass.__init__    s   € Ü×Ñ˜dÕ#ó    c                 ó@  — t        |j                  j                  «      dk(  sJ ‚t        |j                  j                  j	                  «       «      d   }t        |j                  «      D ]s  \  }}t        t        |j                  |j                  «      €Œ,t        |j                  i ||d„ |j                  |j                  d|j                  |j                  «
        n t        j                   |j                  «      }|j#                  «        |j%                  «        y)Né   r   c                   ó   — y r4   © r>   r:   r9   Ú<lambda>z)InlineTestPass.run_pass.<locals>.<lambda>)   s   € Èr:   r>   T)ÚlenÚfunc_irÚblocksÚlistÚvaluesÚ	enumerateÚbodyr   r   Úvaluer   Ú	typingctxÚ	targetctxÚtypemapÚ	calltypesr   ÚPostProcessorÚrunÚremove_dels)r8   ÚstateÚblockÚiÚstmtÚ	post_procs         r9   Úrun_passzInlineTestPass.run_pass#   sÕ   € ä�5—=‘=×'Ñ'Ó(¨AÒ-Ð-Ð-Ü�U—]‘]×)Ñ)×0Ñ0Ó2Ó3°AÑ6ˆÜ  §¡Ö,‰GˆAˆtÜ”] 5§=¡=°$·*±*Ó=ÑIÜ# E§M¡M°2°u¸aÁØ$)§O¡O°U·_±_ÀbØ$)§M¡M°5·?±?ôDñ ð -ô ×*Ñ*¨5¯=©=Ó9ˆ	Ø�‰ŒØ×ÑÔØr:   N©Ú__name__Ú
__module__Ú__qualname__Ú_namer6   rT   r>   r:   r9   r1   r1      s   „ à€Eò$ór:   r1   c                 óú  — d}t        |«      }|j                  t        d«       |j                  t        d«       |j                  t        d«       |j                  t
        d«       | j                  j                  sB|j                  t        d«       |j                  t        d«       |j                  t        d«       |j                  t        d	«       |j                  t        d
«       | j                  j                  j                  r|j                  t        d«       | j                  j                  s|j                  t         d«       | j                  j                  j                  rB|j                  t"        d«       |j                  t$        d«       |j                  t&        d«       |j                  |d«       |j                  t(        d«       |j                  t*        d«       |j                  t,        d«       | j                  j                  j                  r|j                  t.        d«       n|j                  t0        d«       |j                  t2        d«       |j                  t4        d«       |S )NÚinline_testzanalyzing bytecodezfix up argszprocessing IRzHandle with contextsznopython rewriteszrewrite semantic constantszdead branch pruningz(inline calls to locally defined closuresznopython frontendzPreprocessing for parforszconvert to parforszfuse parforszparfor preloweringzinline testz$ensure IR is legal prior to loweringzannotate typeszpreserve IRznative parfor loweringznative loweringznopython mode backendzdump parfor diagnostics)r+   Úadd_passr   r   r   r   ÚflagsÚno_rewritesr   r   r   r   r   Úauto_parallelÚenabledr!   r    r"   r(   r)   r&   r   r   r%   r$   r'   r#   )rO   Ú	test_passÚnameÚpms       r9   Úgen_pipelinerd   4   sÀ  € ØˆÜ˜ÓˆØ
�‰Ô%Ð';Ô<Ø
�‰”I˜}Ô-Ø
�‰”L /Ô2Ø
�‰”KÐ!7Ô8à�{‰{×&Ò&Ø�K‰KœÐ)<Ô=Ø�K‰KÔ0Ð2NÔOØ�K‰KœÐ)>Ô?Ø
�‰Ô&Ø>ô	@ð 	�‰Ô)Ð+>Ô?à�;‰;×$Ñ$×,Ò,Ø�K‰KœÐ'BÔCØ�{‰{×&Ò&Ø�K‰KÔ(Ð*=Ô>Ø�;‰;×$Ñ$×,Ò,Ø�K‰Kœ
Ð$8Ô9Ø�K‰KÔ(¨.Ô9Ø�K‰KÔ-Ð/CÔDà
�‰�I˜}Ô-ð 	�‰”NÐ$JÔKØ
�‰”MÐ#3Ô4Ø
�‰”J Ô.ð �;‰;×$Ñ$×,Ò,Ø�K‰KÔ,Ð.FÕGà�K‰KœÐ(9Ô:Ø
�‰”OÐ%<Ô=Ø
�‰Ô)Ð+DÔEØˆ	r:   c                   ó   — e Zd ZdZd„ Zy)ÚInlineTestPipelinez>compiler pipeline for testing inlining after optimization
    c                 ó\   — t        | j                  t        «      }|j                  «        |gS r4   )rd   rO   r1   Úfinalize)r8   rc   s     r9   Údefine_pipelinesz#InlineTestPipeline.define_pipelinesa   s"   € Ü˜$Ÿ*™*¤nÓ5ˆØ
�‰ŒØˆtˆr:   N)rV   rW   rX   Ú__doc__ri   r>   r:   r9   rf   rf   ^   s   „ ñór:   rf   c                   ón   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Ze	d„ «       Z
e	d„ «       Ze	d	„ «       Ze	d
„ «       Zy)ÚTestInliningzÕ
    Check that jitted inner functions are inlined into outer functions,
    in nopython mode.
    Note that not all inner functions are guaranteed to be inlined.
    We just trust LLVM's inlining heuristics.
    c           	      ó�   — |j                  d«      }ddj                  |D �cg c]  }dj                  |«      ‘Œ c}«      z   S c c}w )z4
        Make regexpr to match mangled name
        Ú.z_ZN?Ú z\d+{})ÚsplitÚjoinÚformat)r8   ÚfullnameÚpartsÚps       r9   Úmake_patternzTestInlining.make_patternn   sA   € ð —‘˜sÓ#ˆØ˜Ÿ™¹uÓ"E¹u¸! 8§?¡?°1Õ#5¸uÑ"EÓFÑFÐFùÒ"Es   ¢A
c                 ó’   — | j                  |«      }| j                  t        j                  ||«      dj	                  |«      ¬«       y )Nzexpected {}©Úmsg)rv   ÚassertIsNotNoneÚreÚsearchrr   ©r8   rs   ÚtextÚpats       r9   Úassert_has_patternzTestInlining.assert_has_patternu   s@   € Ø×Ñ Ó)ˆØ×ÑœRŸY™Y s¨DÓ1Ø!.×!5Ñ!5°cÓ!:ð 	õ 	<r:   c                 ó’   — | j                  |«      }| j                  t        j                  ||«      dj	                  |«      ¬«       y )Nzunexpected {}rx   )rv   ÚassertIsNoner{   r|   rr   r}   s       r9   Úassert_not_has_patternz#TestInlining.assert_not_has_patternz   s@   € Ø×Ñ Ó)ˆØ×Ñœ"Ÿ)™) C¨Ó.Ø-×4Ñ4°SÓ9ð 	õ 	;r:   c                 ó|  — ddl m}m} t        dd«      5  t	        «       5 } t        t        j                  fd¬«      |«      }d d d «       d d d «       | j                   d«      d«       j                  «       }| j                  d|z  |«       | j                  d	|z  |«       y # 1 sw Y   ŒdxY w# 1 sw Y   ŒhxY w)
Nr   )Úouter_simplerV   ÚDUMP_ASSEMBLYT©Únopythonr<   é   z%s.outer_simpleú%s.inner)Únumba.tests.inlining_usecasesr…   rV   r   r   r   r	   Úint32ÚassertPreciseEqualÚgetvaluer€   rƒ   )r8   r…   ÚprefixÚoutÚcfuncÚasms         r9   Útest_inner_functionz TestInlining.test_inner_function   sž   € ÷	ô ˜_¨dÕ3Ü Ô" cØ:œœUŸ[™[˜N°TÔ:¸<ÓH�÷ #÷ 4ð 	×Ñ¡ a£¨!Ô,ð �l‰l‹nˆØ×ÑÐ 1°FÑ :¸CÔ@Ø×#Ñ# J°Ñ$7¸Õ=÷ #Ð"ú÷ 4Ð3ús"   •B2 #B&ÁB2Â&B/	Â+B2Â2B;c                 ó¦  — ddl m}m} t        dd«      5  t	        «       5 } t        t        j                  fd¬«      |«      }d d d «       d d d «       | j                   d«      d«       j                  «       }| j                  d|z  |«       | j                  d	|z  |«       | j                  d
|z  |«       y # 1 sw Y   ŒyxY w# 1 sw Y   Œ}xY w)Nr   )Úouter_multiplerV   r†   Tr‡   r<   é   z%s.outer_multiplez%s.morerŠ   )r‹   r•   rV   r   r   r   r	   rŒ   r�   rŽ   r€   rƒ   )r8   r•   r�   r�   r‘   r’   s         r9   Útest_multiple_inner_functionsz*TestInlining.test_multiple_inner_functions�   s±   € ÷	ô
 ˜_¨dÕ3Ü Ô" cØ:œœUŸ[™[˜N°TÔ:¸>ÓJ�÷ #÷ 4ð 	×Ñ¡ a£¨!Ô,Ø�l‰l‹nˆØ×ÑÐ 3°fÑ <¸cÔBØ×#Ñ# I°Ñ$6¸Ô<Ø×#Ñ# J°Ñ$7¸Õ=÷ #Ð"ú÷ 4Ð3ús"   •C #B;ÁCÂ;C	Ã CÃCc                 ó°   ‡— ddl mŠ ˆfd„} t        dt        ¬«      |«      }t	        j
                  d«      }| j                   ||«       ||«      «       y )Nr   )Ú	__dummy__c                 ó2   •—  ‰«        | j                  «       S r4   )Úsum)ÚAr™   s    €r9   Ú	test_implz=TestInlining.test_inline_call_after_parfor.<locals>.test_impl¡   s   ø€ ÙŒKØ—5‘5“7ˆNr:   T)ÚparallelÚpipeline_classé
   )r‹   r™   r   rf   ÚnpÚarangeÚassertEqual)r8   r�   Új_funcrœ   r™   s       @r9   Útest_inline_call_after_parforz*TestInlining.test_inline_call_after_parforœ   sK   ø€ å;ô	ð H”˜tÔ4FÔGØDMóOˆä�I‰I�b‹MˆØ×Ñ™ 1›¡v¨a£yÕ1r:   c           	      ó   — d„ }t        j                  |«      }t        |j                  j	                  «       «      }|D �]e  }t        |j                  «      D �]I  \  }}t        |t        j                  «      sŒ"t        |j                  t        j                  «      sŒGt        t        ||j                  «      dk(  sŒf|j                  |j                  j                      j#                  |j                  «       t        j$                  j'                  t        j                  |j(                  d|j*                  ¬«      dd|j*                  «      |_
        |j                  |j                  j                      j-                  |j                  «       t/        |i ||d„ «        �Œe �Œh | j1                  t3        |j                  d   «      d«       y )Nc                 ó   — | dk(  rd}|S d}|S )Nr<   é   é   r>   ©ÚaÚbs     r9   r�   z=TestInlining.test_inline_update_target_def.<locals>.test_impl¬   s!   € Ø�AŠvØ�ð ˆHð �ØˆHr:   r¨   Úmyvar)Úlocr>   c                   ó   — y©Nr¨   r>   r>   r:   r9   r?   z<TestInlining.test_inline_update_target_def.<locals>.<lambda>¿   s   € Àqr:   r¬   )r   Úrun_frontendrC   rB   rD   rE   rF   Ú
isinstancer
   ÚAssignrG   ÚVarr   r   Ú_definitionsÚtargetrb   ÚremoveÚExprÚcallÚscoper®   Úappendr   r£   r@   )r8   r�   rA   rB   rP   rQ   rR   s          r9   Útest_inline_update_target_defz*TestInlining.test_inline_update_target_def©   s@  € ò	ô ×'Ñ'¨	Ó2ˆÜ�g—n‘n×+Ñ+Ó-Ó.ˆÜˆEÜ$ U§Z¡Z×0‘��4ä˜t¤R§Y¡YÕ/´J¸t¿z¹zÌ2Ï6É6Õ4RÜ!¤*¨g°t·z±zÓBÀaÓGà×(Ñ(¨¯©×)9Ñ)9Ñ:×AÑAÀ$Ç*Á*ÔMÜ!#§¡§¡¬b¯f©f°U·[±[À'ÈtÏxÉxÔ.XÐZ\Ð^`Ðbf×bjÑbjÓ!k�D”JØ×(Ñ(¨¯©×)9Ñ)9Ñ:×AÑAÀ$Ç*Á*ÔMä'¨°°U¸A¹yÔIÚò 1ð ð 	×Ñœ˜W×1Ñ1°#Ñ6Ó7¸Õ;r:   c           	      ó(  ‡— t        dt        j                  i¬«      d„ «       Šˆfd„}t        j                  |«      }t        |j                  j                  «       «      }|D �]  }t        |j                  «      D ]þ  \  }}t        |t        j                  «      sŒ!t        |j                  t        j                  «      sŒF|j                  j                  dk(  sŒ`t!        t"        ||j                  j$                  «      }t        |t        j&                  t        j(                  f«      sŒ°t        |j                  t*        «      sŒË|j                  j,                  }t/        ||j0                  |||«      \  }	}
 �Œ �Œ | j3                  d
v «       y )Nr¬   )Úlocalsc                 ó   — | dz   }|S ©Nr<   r>   rª   s     r9   Úgz0TestInlining.test_inline_var_dict_ret.<locals>.gÈ   s   € à�A‘ˆAØˆHr:   c                  ó   •—  ‰ d«      S rÀ   r>   )rÁ   s   €r9   r�   z8TestInlining.test_inline_var_dict_ret.<locals>.test_implÍ   s   ø€ Ù�Q“4ˆKr:   r¹   )r   r	   Úfloat64r   r±   rC   rB   rD   rE   rF   r²   r
   r³   rG   r¸   Úopr   r   ÚfuncÚGlobalÚFreeVarr   Úpy_funcr   Ú__globals__Ú
assertTrue)r8   r�   rA   rB   rP   rQ   rR   Úfunc_defrÈ   Ú_Úvar_maprÁ   s              @r9   Útest_inline_var_dict_retz%TestInlining.test_inline_var_dict_retÄ   s#  ø€ ô 
�cœ5Ÿ=™=Ð)Ô	*ñ	ó 
+ð	ô	ô ×'Ñ'¨	Ó2ˆÜ�g—n‘n×+Ñ+Ó-Ó.ˆÜˆEÜ$ U§Z¡ZÖ0‘��4Ü˜t¤R§Y¡YÕ/Ü& t§z¡z´2·7±7Õ;Ø ŸJ™JŸM™M¨VÓ3Ü$¤^°W¸d¿j¹j¿o¹oÓN�HÜ" 8¬b¯i©i¼¿¹Ð-DÕEÜ *¨8¯>©>¼=Õ IØ"*§.¡.×"8Ñ"8˜Ü%8Ø# W×%8Ñ%8¸%ÀÀGó&M™
˜˜7âò 1ð ð 	�‰˜˜w˜Õ'r:   c                 ó   ‡‡— t         dd„«       Šdˆfd„	}t        dd¬«       G ˆfd„dt        «      «       Š G ˆfd„d	t        j                  «      } t        |¬
«      |«      }d}| j                   ||«       ||«      «       | j                   |«        |«       «       |j                  t        j                  d «      f   j                  d   }t        |j                  «      |_        | j                  t        |j                  «      d«       y )Nc                 ó   — | €y| S r°   r>   )rœ   s    r9   Úfooz9TestInlining.test_inline_call_branch_pruning.<locals>.fooå   s   € àˆyØà�r:   c                 ó   •—  ‰| «      S r4   r>   )rœ   rÑ   s    €r9   r�   z?TestInlining.test_inline_call_branch_pruning.<locals>.test_implì   s   ø€ Ù�q“6ˆMr:   FTr-   c                   ó"   •— e Zd ZdZd„ Zˆ fd„Zy)úKTestInlining.test_inline_call_branch_pruning.<locals>.PruningInlineTestPassÚpruning_inline_test_passc                 ó.   — t        j                  | «       y r4   r5   r7   s    r9   r6   zTTestInlining.test_inline_call_branch_pruning.<locals>.PruningInlineTestPass.__init__ó   s   € Ü×%Ñ% dÕ+r:   c                 ó6  •— t        |j                  j                  «      dk(  sJ ‚t        |j                  j                  j	                  «       «      d   }t        |j                  «      D ]¬  \  }}t        t        |j                  |j                  «      	 €Œ-t        |j                  i ||‰j                  |j                  |j                  |j                  |j                  j                  d   j                      f|j                  |j"                  «
        y y)Nr<   r   T)r@   rA   rB   rC   rD   rE   rF   r   r   rG   r   rÈ   rH   rI   rJ   Úargsrb   rK   )r8   rO   rP   rQ   rR   rÑ   s        €r9   rT   zTTestInlining.test_inline_call_branch_pruning.<locals>.PruningInlineTestPass.run_passö   sØ   ø€ ä˜5Ÿ=™=×/Ñ/Ó0°AÒ5Ð5Ð5Ü˜UŸ]™]×1Ñ1×8Ñ8Ó:Ó;¸AÑ>�Ü(¨¯©Ö4‘G�A�tÜœm¨U¯]©]¸D¿J¹JÓGØ#'ñ(ä+¨E¯M©M¸2¸uÀaØŸK™K¨¯©¸%¿/¹/Ø"Ÿ]™]¨4¯:©:¯?©?¸1Ñ+=×+BÑ+BÑCÐEØ"Ÿ]™]¨E¯O©Oô=ð Øð  5ð r:   NrU   )rÑ   s   €r9   ÚPruningInlineTestPassrÔ   ï   s   ø„ à.ˆEò,õr:   rÙ   c                   ó   •— e Zd Zˆ fd„Zy)úMTestInlining.test_inline_call_branch_pruning.<locals>.InlineTestPipelinePrunec                 óV   •— t        | j                  ‰«      }|j                  «        |gS r4   )rd   rO   rh   )r8   rc   rÙ   s     €r9   ri   z^TestInlining.test_inline_call_branch_pruning.<locals>.InlineTestPipelinePrune.define_pipelines  s$   ø€ Ü! $§*¡*Ð.CÓD�Ø—‘”Ø�t�r:   N)rV   rW   rX   ri   )rÙ   s   €r9   ÚInlineTestPipelinePrunerÛ     s   ø„ õr:   rÝ   )rŸ   r©   Úpreserved_irr<   r4   )r   r,   r*   r   ÚCompilerBaser£   Ú	overloadsr	   ÚOmittedÚmetadatar   rB   r@   )r8   r�   rÝ   r¤   rœ   ÚfirrÙ   rÑ   s         @@r9   Útest_inline_call_branch_pruningz,TestInlining.test_inline_call_branch_pruningá   sæ   ù€ ô 
ò	ó 
ð	õ	ô 
 U¸Ô	=ö	¤Ló 	ó 
>ð	ö(	¤h×&;Ñ&;ô 	ð >”Ð%<Ô=¸iÓHˆØˆØ×Ñ™ 1›¡v¨a£yÔ1Ø×Ñ™›¡f£hÔ/ð ×Ñ¤§¡¨dÓ 3Ð5Ñ6×?Ñ?ÀÑOˆÜ! #§*¡*Ó-ˆŒ
Ø×Ñœ˜SŸZ™Z›¨!Õ,r:   N)rV   rW   rX   rj   rv   r€   rƒ   r“   r—   r   r¥   r¼   rÎ   rä   r>   r:   r9   rl   rl   f   sq   „ ñòGò<ò
;ò
>ò>ð ñ
2ó ð
2ð ñ<ó ð<ð4 ñ(ó ð(ð8 ñ2-ó ñ2-r:   rl   Ú__main__)>r{   Únumpyr¡   Únumba.tests.supportr   r   r   r   Únumbar   r   Ú
numba.corer	   r
   r   r   Únumba.core.ir_utilsr   r   r   r   r   Únumba.core.registryr   Únumba.core.inline_closurecallr   Únumba.core.untyped_passesr   r   r   r   r   r   r   r   r   r   Únumba.core.typed_passesr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Únumba.core.compiler_machineryr*   r+   r,   Úunittestr1   rd   rß   rf   rl   rV   Úmainr>   r:   r9   Ú<module>rò      sÅ   ðÛ 	Û ÷0ó 0ç ß 4Ó 4÷?õ ?å -Ý =÷J÷ J÷ J÷
D÷ D÷ Dõ D÷ SÑ RÛ á˜U°Ô5ô�\ó ó 6ðò.(ôT˜×.Ñ.ô ôn-�8ô n-ð` ˆzÒØ€H‡M�M…Oð r:   