Ë
    èÿæi�%  ã                   óp  — d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZmZmZ d d	lmZ d
Z ede j<                  j                  j?                  e j@                  «      fg«       G d„ de!«      «       Z" G d„ de«      Z#e$dk(  r ejJ                  «        yy)é    N)ÚTestCaseÚunittest)Ú
cpu_target)ÚCompilerBaseÚFlags)ÚPassManager)ÚtypesÚirÚbytecodeÚcompilerÚir_utilsÚregistry)ÚExtractByteCodeÚTranslateByteCodeÚ	FixupArgsÚIRProcessing)ÚNopythonTypeInferenceÚtype_inference_stageÚDeadCodeElimination)Újitclassé   Úvalc                   ó   — e Zd Zd„ Zy)ÚDummyc                 ó   — || _         y ©N)r   )Úselfr   s     ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_ir_utils.pyÚ__init__zDummy.__init__   s	   € Øˆ�ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r    r   r   r      s   „ ór    r   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚTestIrUtilszA
    Tests ir handling utility functions like find_callname.
    c                 óŽ  — d„ }t        j                  |«      }t        j                  }t        j                  }t        |||dd«      }t        j                  ||j                  d   j                  d   j                  |j                  «      }| j                  t        |t        «      xr t        |«      dk(  xr |d   dk(  «       y)zGTest matching of an object method (other than Array see #3449)
        c                  óR   — t        dg«      } | j                  j                  d«       y )Né   é   )r   r   Úappend)Úds    r   Ú	test_funcz2TestIrUtils.test_obj_func_match.<locals>.test_func!   s   € Ü�q�c“
ˆAØ�E‰E�L‰L˜�Or    r$   Nr   é   r*   r+   )r   Úrun_frontendr   Útyping_contextÚtarget_contextr   r   Úfind_callnameÚblocksÚbodyÚvalueÚtypemapÚ
assertTrueÚ
isinstanceÚtupleÚlen)r   r-   Útest_irÚ	typingctxÚ	targetctxÚ
typing_resÚmatched_calls          r   Útest_obj_func_matchzTestIrUtils.test_obj_func_match   s´   € ò	ô ×'Ñ'¨	Ó2ˆÜ×-Ñ-ˆ	Ü×-Ñ-ˆ	Ü)Ø�y '¨2¨tó5ˆ
ä×-Ñ-Ø�W—^‘^ AÑ&×+Ñ+¨AÑ.×4Ñ4°j×6HÑ6HóJˆà�‰œ
 <´Ó7ò 4Ü˜LÓ)¨QÑ.ò4à$ Q™¨8Ñ3õ	5r    c                 óâ  ‡ —  G d„ dt         «      }ˆ fd„}ˆ fd„}d„ }|j                  t        j                  f«      }|j	                  |«      } ||«      }|j                  t        j                  f«      }|j	                  |d¬«      } ||«       ‰ j                  t        |j                  d   j                  «      t        |«      z
  t        |j                  d   j                  «      «       y )	Nc                   ó2   — e Zd Ze	 	 	 	 	 	 dd„«       Zdd„Zy)ú6TestIrUtils.test_dead_code_elimination.<locals>.TesterNc           	      ó¼   — |€i }|s
t        «       }d|_        |€t        j                  j                  }|€t        j                  j
                  } | |||||||«      S )NT)r   Únrtr   r   r0   r1   )ÚclsÚargsÚreturn_typeÚflagsÚlocalsÚlibraryr0   r1   s           r   Úmk_pipelinezBTestIrUtils.test_dead_code_elimination.<locals>.Tester.mk_pipeline4   si   € ð �>Ø�FÙÜ!›G�EØ �”	Ø!Ð)Ü%-×%8Ñ%8×%GÑ%G�NØ!Ð)Ü%-×%8Ñ%8×%GÑ%G�NÙ˜>¨>¸7ÀDØ&¨¨vó7ð 7r    c                 ó  — t         j                  j                  |«      }|| j                  _        t        «       j                  | j                  «       | j                  }d}t        |«      }|j                  t        d«       |j                  t        d«       |j                  t        d«       |j                  t        d«       |du r|j                  t        d«       |j                  «        |j                  |«       |j                   S )z7
                Compile and return IR
                ÚDCE_testingzanalyzing bytecodezfix up argszprocessing IRznopython frontendTzDCE after typing)r   ÚFunctionIdentityÚfrom_functionÚstateÚfunc_idr   Úrun_passr   Úadd_passr   r   r   r   r   ÚfinalizeÚrunÚfunc_ir)r   ÚfuncÚDCErR   rQ   ÚnameÚpms          r   Úcompile_to_irzDTestIrUtils.test_dead_code_elimination.<locals>.Tester.compile_to_irK   sÄ   € ô #×3Ñ3×AÑAÀ$ÓG�Ø%,�—
‘
Ô"ÜÓ!×*Ñ*¨4¯:©:Ô6ØŸ
™
�à$�Ü  Ó&�Ø—‘Ô-Ð/CÔDØ—‘œI }Ô5Ø—‘œL¨/Ô:Ø—‘Ô1Ð3FÔGØ˜$‘;Ø—K‘KÔ 3Ð5GÔHØ—‘”Ø—‘�u”Ø—}‘}Ð$r    )NNNNNN)F)r!   r"   r#   ÚclassmethodrL   r\   r$   r    r   ÚTesterrC   2   s-   „ àð !ØØØØ#Ø#ò7ó ð7ô,%r    r^   c                 óR  •— ‰j                  t        | j                  «      d«       | j                  d   }g }|j                  t        j
                  «      D ]S  }t        t        |dd «      t        j                  «      sŒ)dt        |j                  dd«      v sŒC|j                  |«       ŒU ‰j                  t        |«      d«       |D ]Z  }| j                  |j                  «      }‰j                  t        d|j                  j                  z  d	«      |j                  «       Œ\ |S )
Nr)   r   ÚtargetÚdeadrZ   Ú r*   z0x%sé   )ÚassertEqualr:   r3   Ú
find_instsr
   ÚAssignr8   ÚgetattrÚVarr`   r+   Úget_definitionr5   r7   ÚintrZ   )Úthe_irÚblockÚdeadsÚxr,   Ú	const_valr   s         €r   Úcheck_initial_irz@TestIrUtils.test_dead_code_elimination.<locals>.check_initial_ir`   så   ø€ ð ×ÑœS §¡Ó/°Ô3Ø—M‘M !Ñ$ˆEØˆEØ×%Ñ%¤b§i¡iÖ0�Üœg a¨°4Ó8¼"¿&¹&ÕAØ¤¨¯©°6¸2Ó!>Ò>ØŸ™ Q�ð 1ð
 ×ÑœS ›Z¨Ô+Û�à"×1Ñ1°!·'±'Ó:�	Ø—‘¤ F¨Q¯X©X¯]©]Ñ$:¸BÓ ?Ø )§¡õ1ð ð ˆLr    c                 ó\  •— ‰j                  t        | j                  «      d«       | j                  d   }g }g }|j                  t        j
                  «      D ]ˆ  }t        t        |dd «      t        j                  «      r*dt        |j                  dd«      v r|j                  |«       t        t        |dd «      t        j                  «      sŒx|j                  |«       ŒŠ ‰j                  t        |«      d«       |D ])  }‰j                  |j                  j                  dv«       Œ+ y )	Nr)   r   r`   ra   rZ   rb   r5   )é­Þ  ì   ­^[= )rd   r:   r3   re   r
   rf   r8   rg   rh   r`   r+   ÚConstr7   r5   )rk   rl   rm   Úconstsrn   r   s        €r   Úcheck_dce_irz<TestIrUtils.test_dead_code_elimination.<locals>.check_dce_iry   sã   ø€ Ø×ÑœS §¡Ó/°Ô3Ø—M‘M !Ñ$ˆEØˆEØˆFØ×%Ñ%¤b§i¡iÖ0�Üœg a¨°4Ó8¼"¿&¹&ÔAØ¤¨¯©°6¸2Ó!>Ñ>ØŸ™ QœÜœg a¨°$Ó7¼¿¹ÕBØ—M‘M !Õ$ð 1ð ×ÑœS ›Z¨Ô+ó �Ø—‘ §¡§¡Ð5IÐ IÕJñ r    c                 ó,   — | dz   }d}|dz   }d}||z  }|S )Nr)   rr   r*   rs   r$   )rn   Úyra   ÚzÚdeaddeadÚrets         r   Úfooz3TestIrUtils.test_dead_code_elimination.<locals>.foo‹   s,   € Ø�A‘ˆAØˆDØ�A‘ˆAØ!ˆHØ�a‘%ˆCØˆJr    T)rY   r   )	r   rL   r	   Úintpr\   rd   r:   r3   r4   )	r   r^   rp   rv   r|   Útest_pipelineÚno_dceÚremovedÚw_dces	   `        r   Útest_dead_code_eliminationz&TestIrUtils.test_dead_code_elimination0   sÊ   ø€ ô,	%”\ô ,	%ô\	ô2	Kò$	ð ×*Ñ*¬E¯J©J¨=Ó9ˆØ×,Ñ,¨SÓ1ˆÙ" 6Ó*ˆà×*Ñ*¬E¯J©J¨=Ó9ˆØ×+Ñ+¨C°TÐ+Ó:ˆÙ�UÔð 	×Ñœ˜VŸ]™]¨1Ñ-×2Ñ2Ó3´c¸'³lÑBÜ˜UŸ\™\¨!™_×1Ñ1Ó2õ	4r    c                 ób  ‡— dŠˆfd„}t        j                  |«      }|j                  d   }d}d}|j                  D ]È  }t	        |t
        j                  «      rH|j                  j                  dk(  r/t        j                  t        j                  ||j                  «      }t	        |t
        j                  «      sŒ€|j                  j                  dk(  sŒšt        j                  t        j                  ||j                  «      }ŒÊ | j                  |t        «       | j                  |‰«       y)z–
        Test find_const() for values in globals (ir.Global) and freevars
        (ir.FreeVar) that are considered constants for compilation.
        é   c                 ó$   •— t         }‰}| |z   |z   S r   )ÚGLOBAL_B)ÚaÚbÚcÚ	FREEVAR_Cs      €r   r|   z/TestIrUtils.test_find_const_global.<locals>.foo¦   s   ø€ ÜˆAØˆAØ�q‘5˜1‘9Ðr    r   Nrˆ   r‰   )r   r/   r3   r4   r8   r
   rf   r`   rZ   r   ÚguardÚ
find_constrd   r†   )r   r|   Úf_irrl   Úconst_bÚconst_cÚinstrŠ   s          @r   Útest_find_const_globalz"TestIrUtils.test_find_const_globalŸ   sä   ø€ ð
 ˆ	ô	ô
 ×$Ñ$ SÓ)ˆØ—‘˜A‘ˆØˆØˆà—J”JˆDÜ˜$¤§	¡	Ô*¨t¯{©{×/?Ñ/?À3Ò/FÜ"Ÿ.™.Ü×'Ñ'¨¨t¯{©{ó<�ä˜$¤§	¡	Õ*¨t¯{©{×/?Ñ/?À3Ó/FÜ"Ÿ.™.Ü×'Ñ'¨¨t¯{©{ó<‘ð ð 	×Ñ˜¤(Ô+Ø×Ñ˜ )Õ,r    c                 óš   ‡ — d„ }d„ }d„ }ˆ fd„} ||«      } ||«      } ||«      }‰ j                  ||«       ‰ j                  ||«       y)z tests flatten_labels c                 ó²   — d}| dkD  r|dz  }| dkD  r=y| dk  r,| dk\  r|dz  }t        d«      D ]  }|dz  }|d	k  sŒ n |d
z  }nt        d«      ‚d}d	}d}d}|S )Nr   é   r)   é   é5   éè  r„   é
   r*   r.   úsome stringé   ©ÚrangeÚ
ValueError©r‡   Úaccrn   Úpy310_defeat1Úpy310_defeat2Úpy310_defeat3Úpy310_defeat4s          r   r|   z,TestIrUtils.test_flatten_labels.<locals>.foo½   sˆ   € ØˆCØ�1ŠuØ�q‘�Ø�r’6ØØ�T’Ø˜’7Ø˜1‘H�CÜ˜rž�AØ˜1‘H�CØ˜Q“wÙð #ð
 ˜1‘H‘Cä  Ó/Ð/àˆMØˆMØˆMØˆMØˆJr    c                 óè   — d}d}| dkD  r|dz  }|dz  }| dkD  rQ|dz  }y| dk  r;| dk\  r
|dz  }|dz  }t        d«      D ]  }|dz  }|dz  }|d	k  sŒ n |dz  }|d
z  }nt        d«      ‚d}d	}d}d}|S )Nr   r„   r”   r)   r•   r–   r—   r˜   r*   r.   r™   rš   r›   )r‡   rŸ   ry   rn   r    r¡   r¢   r£   s           r   Úbarz,TestIrUtils.test_flatten_labels.<locals>.barÕ   sº   € ØˆCØˆAØ�1ŠuØ�q‘�Ø�R‘�Ø�r’6Ø˜‘G�AØØ�T’Ø˜’7Ø˜‘G�AØ˜1‘H�CÜ˜rž�AØ˜‘G�AØ˜1‘H�CØ˜Q“wÙð	 #ð ˜‘G�AØ˜1‘H‘Cä  Ó/Ð/ØˆMØˆMØˆMØˆMØˆJr    c                 ó´   — d}| dkD  r|dz  }| dkD  ryy| dk  r,| dk\  r|dz  }t        d	«      D ]  }|dz  }|d
k  sŒ n |dz  }nt        d«      ‚d}d
}d}d}|S )Nr   r”   r)   r•   r–   é7   r—   r„   r˜   r*   r.   r™   rš   r›   rž   s          r   Úbazz,TestIrUtils.test_flatten_labels.<locals>.bazò   s‹   € ØˆCØ�1ŠuØ�q‘�Ø�r’6ØàØ�T’Ø˜’7Ø˜1‘H�CÜ˜rž�AØ˜1‘H�CØ˜Q“wÙð #ð
 ˜1‘H‘Cä  Ó/Ð/ØˆMØˆMØˆMØˆMØˆJr    c                 ó&  •— t        j                  | t        «       «      }t        j                  |j                  «      }‰j                  t        |j                  «       «      dz   t        |j                  «      «       t        j                  |«      S )Nr)   )
r   Úcompile_to_numba_irÚdictÚflatten_labelsr3   rd   ÚmaxÚkeysr:   Úcompute_cfg_from_blocks)rX   rW   Úflat_blocksr   s      €r   Úget_flat_cfgz5TestIrUtils.test_flatten_labels.<locals>.get_flat_cfg  sh   ø€ Ü×2Ñ2°4¼»Ó@ˆGÜ"×1Ñ1°'·.±.ÓAˆKØ×ÑœS ×!1Ñ!1Ó!3Ó4°qÑ8¼#¸g¿n¹nÓ:MÔNÜ×3Ñ3°KÓ@Ð@r    N)rd   ÚassertNotEqual)r   r|   r¥   r¨   r±   Úfoo_cfgÚbar_cfgÚbaz_cfgs   `       r   Útest_flatten_labelszTestIrUtils.test_flatten_labels»   sX   ø€ ò	ò0	ò:	ô2	Añ ˜sÓ#ˆÙ˜sÓ#ˆÙ˜sÓ#ˆà×Ñ˜ 'Ô*Ø×Ñ˜G WÕ-r    N)r!   r"   r#   Ú__doc__r@   r‚   r‘   r¶   r$   r    r   r&   r&      s   „ ñò5ò&m4ò^-ó8[.r    r&   Ú__main__)&ÚnumbaÚnumba.tests.supportr   r   Únumba.core.registryr   Únumba.core.compilerr   r   Únumba.core.compiler_machineryr   Ú
numba.corer	   r
   r   r   r   r   Únumba.core.untyped_passesr   r   r   r   Únumba.core.typed_passesr   r   r   Únumba.experimentalr   r†   ÚcoreÚListr}   Úobjectr   r&   r!   Úmainr$   r    r   Ú<module>rÆ      s¦   ðÛ ß 2Ý *ß 3Ý 5ß H× H÷Aó A÷Pñ På 'ð €ñ 
ˆE�5—:‘:×#Ñ#×(Ñ(¨¯©Ó4Ð5Ð
6Ó7ôˆFó ó 8ðô
~.�(ô ~.ðB ˆzÒØ€H‡M�M…Oð r    