Ë
    øÿæi»J  ã                   ó  — U 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
Z
ddlZddl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ZddlmZ ddlmZ dd	lmZ d
dl 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.m/Z/m0Z0 d
dl1m2Z2m3Z3 dZ4ee
jj                     e6d<   	 ddl7Z4e"jr                  Z9dZ: ejv                  e<«      Z= ed«      Z>deej~                     deej~                     fd„Z@deAdeAfd„ZBd„ ZCd„ ZDdejŠ                  jŒ                  dedededeGe   f
d„ZHdedeIfd „ZJedej~                  dej~                  fd!„«       ZKedeeGe   eLed"f   eMeef   f   deNfd#„«       ZKdedeej~                  eNf   fd$„ZKdeAfd%„ZOdpdeAd&e
j                   d'eAddfd(„ZQdd)œd*e/d+eRd,ed-ed.eRde.fd/„ZS G d0„ d1«      ZT G d2„ d3«      ZU G d4„ d5«      ZV G d6„ d7«      ZW G d8„ d9«      ZXd&eAdeAfd:„ZYd&eAdeAfd;„ZZd&eAdeAfd<„Z[d=eAdeAfd>„Z\d&eAdeAfd?„Z]	 	 	 dqd@edAed"ef   dBeRdCeeR   dDeeR   dEeRddfdF„Z^dGej¾                  deGej~                     ded"ef   fdH„Z`	 	 drdIeNdJeNdKeIdLeNdeAf
dM„ZaejÄ                  dNdfdOeeR   dPeeR   dQejÆ                  dReeAejÈ                  f   dSeRdej~                  fdT„Ze edU«      ZfdeIfdV„ZgdAee>eff   dWedee>eff   fdX„ZhddY„ dZœd[eid\eAd]eAdWed^eeA   d_eed"ef   ged"ef   f   deifd`„ZjdAee>eff   dee>eff   fda„ZkdAee>eff   dee>eff   fdb„ZldAee>eff   dee>eff   fdc„ZmdAee>eff   dee>eff   fdd„ZndAee>eff   dee>eff   fde„ZodAee>eff   dee>eff   fdf„ZpdAee>eff   dee>eff   fdg„ZqdAee>eff   dee>eff   fdh„ZrdsdieIddfdj„Zsdkee>eff   dle>jè                  dme>jê                  deffdn„Zvdawejð                  deeGej6                  j¾                        fdo„«       Zyy# e8$ r dZ4Y �ŒLw xY w)ta1  Testing utilities and infrastructure for Dynamo.

This module provides a comprehensive set of testing utilities including:
- Test result collection and validation
- Graph manipulation and comparison tools
- Test case management and execution helpers
- Specialized test decorators for different Python versions and features
- RNG state management
- Compilation counting and monitoring
- Debug utilities for bytecode transformation

The utilities in this module are used across Dynamo's test suite to ensure
consistent testing patterns and proper test isolation.
é    N)ÚCallableÚ	GeneratorÚSequence)ÚAnyÚOptionalÚoverloadÚTypeVarÚUnion)Ú	ParamSpec)Úpatch)Úfx)Ú	aot_eager)ÚOutputGraphé   )ÚconfigÚ
eval_frameÚoptimize_assertÚreset)Úcreate_instructionÚdebug_checksÚis_generatorÚtransform_code_object)ÚCheckFunctionManagerÚ	CompileIdÚGuardedCode)ÚConvertFrameReturnÚDynamoFrameTypeÚwrap_guarded_code)ÚCompileCounterIntÚsameÚnpé   Ú_PÚxÚreturnc                 óv   — | €y | j                  «       j                  «       j                  | j                  «      S ©N)ÚdetachÚcloneÚrequires_grad_Úrequires_grad©r$   s    új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/_dynamo/testing.pyÚclone_mer.   ?   s.   € Ø€yØØ�8‰8‹:×ÑÓ×,Ñ,¨Q¯_©_Ó=Ð=ó    Únamec                 ó0   — t        j                  dd| «      S )Nz^_orig_mod[.]Ú ©ÚreÚsub)r0   s    r-   Úremove_optimized_module_prefixr6   E   ó   € Ü�6‰6Ð" B¨Ó-Ð-r/   c                 óŒ   ‡‡‡— ddl mŠ d Šd Šˆˆˆfd„}  t        j                  |d¬«      | «      |i |¤Ž ‰j                  ‰fS )Nr   )ÚInstructionTranslatorc                 óT   •— | Š‰j                  «       j                  j                  Š| S r'   )Ú
current_txÚoutputÚregion_tracker)Ú_gmÚargsÚkwargsr9   Úgmr=   s      €€€r-   Úextract_graph_backendz8extract_graph_and_tracker.<locals>.extract_graph_backendO   s)   ø€ ð ˆØ.×9Ñ9Ó;×BÑB×QÑQˆØˆ
r/   T)ÚbackendÚ	fullgraph)Útorch._dynamo.symbolic_convertr9   ÚtorchÚcompileÚgraph)Úfnr?   r@   rB   r9   rA   r=   s       @@@r-   Úextract_graph_and_trackerrJ   I   sJ   ú€ ÝDà	€BØ€Nöð EÐ@„E‡M�MÐ/¸4Ô@ÀÓDÀdÐUÈfÒUØ�8‰8�^Ð#Ð#r/   c                 ó¢   — t        «       }  t        j                  |¬«      | «      |i |¤Ž}||j                  |j                  |j
                  fS )N)rC   )ÚAotEagerAndRecordGraphsrF   rG   ÚgraphsÚ	fw_graphsÚ	bw_graphs)rI   r?   r@   rC   Úresults        r-   Úextract_graphrQ   Z   sK   € Ü%Ó'€GØ/Ð+ŒU�]‰] 7Ô+¨BÓ/°Ð@¸Ñ@€FØ�7—>‘> 7×#4Ñ#4°g×6GÑ6GÐGÐGr/   ÚmodelÚ
predictionÚlossÚexample_inputsc                 ó  — g }|j                  |«       |j                  |«       i }i }| j                  «       D ]f  \  }}t        | t        j                  «      rt        |«      }|}	|j                  }
|j                  €t        j                  |«      }
|
||dz   <   |	||<   Œh |j                  |«       |j                  |«       i }| j                  «       D ]/  \  }}t        | t        j                  «      rt        |«      }|||<   Œ1 |j                  |«       |D ]g  }t        |t        t        f«      r|j                  d„ |D «       «       Œ2t        |t        j                  «      sŒM|j                  |j                  «       Œi |S )Nz.gradc              3   ój   K  — | ]+  }t        |t        j                  «      sŒ|j                  –— Œ- y ­wr'   )Ú
isinstancerF   ÚTensorÚgrad)Ú.0Úinps     r-   Ú	<genexpr>z"collect_results.<locals>.<genexpr>�   s"   è ø€ ÐX©w¨¼*ÀSÌ%Ï,É,Õ:W˜3Ÿ8�8©wùs   ‚3¢3)ÚappendÚnamed_parametersrX   r   ÚOptimizedModuler6   rZ   rF   Ú
zeros_likeÚnamed_buffersÚtupleÚlistÚextendrY   )rR   rS   rT   rU   ÚresultsÚgradsÚparamsr0   ÚparamÚ
param_copyrZ   ÚbuffersÚbufferÚexamples                 r-   Úcollect_resultsrn   `   sS  € ð €GØ‡N�N�:ÔØ‡N�N�4Ôð €EØ€FØ×-Ñ-Ö/‰ˆˆeÜ�eœZ×7Ñ7Ô8Ü1°$Ó7ˆDØˆ
Ø�z‰zˆà�:‰:ÐÜ×#Ñ# EÓ*ˆDØ $ˆˆd�W‰nÑØ!ˆˆtŠð 0ð ‡N�N�5ÔØ‡N�N�6ÔØ€GØ×+Ñ+Ö-‰ˆˆfÜ�eœZ×7Ñ7Ô8Ü1°$Ó7ˆDØˆ�Šð .ð ‡N�N�7ÔÛ!ˆÜ�g¤¤t˜}Ô-Ø�N‰NÑX©wÓXÕXä˜'¤5§<¡<Õ0Ø—‘˜wŸ|™|Õ,ð "ð €Nr/   Úoutc                 óð   — t        | t        j                  «      r| j                  S t        | t        t
        f«      rt        d„ | D «       «      S | €yt        | t        «      ryt        dt        | «      «      ‚)Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr'   )Úrequires_bwd_pass©r[   r$   s     r-   r]   z$requires_bwd_pass.<locals>.<genexpr>Œ   s   è ø€ Ð5±¨AÔ$ Q×'±ùó   ‚FúDon't know how to reduce)
rX   rF   rY   r+   rd   rc   ÚanyÚintÚNotImplementedErrorÚtype©ro   s    r-   rr   rr   ˆ   sb   € Ü�#”u—|‘|Ô$Ø× Ñ Ð Ü	�Cœ$¤˜Ô	'ÜÑ5±Ó5Ó5Ð5Ø	ˆØÜ	�CœÔ	ØÜ
Ð8¼$¸s»)Ó
DÐDr/   c                  ó   — y r'   © rz   s    r-   Úreduce_to_scalar_lossr}   ”   s   € Ø>Ar/   .c                  ó   — y r'   r|   rz   s    r-   r}   r}   ˜   s   € ð r/   c                 óZ  — t        | t        j                  «      r!| j                  «       | j	                  «       z  S t        | t
        t        f«      rt        d„ | D «       «      t        | «      z  S t        | «      j                  dv rt        | j                  «      S t        | «      j                  dk(  r| j                  j                  «       S t        | t        «      r:t        d„ | j                  «       D «       «      t        | j                  «       «      z  S t!        dt        | «      «      ‚)z/Reduce the output of a model to get scalar lossc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr'   ©r}   rs   s     r-   r]   z(reduce_to_scalar_loss.<locals>.<genexpr>¤   s   è ø€ Ð9±S°Ô(¨×+±Sùrt   )ÚMaskedLMOutputÚSeq2SeqLMOutputÚ!CausalLMOutputWithCrossAttentionsÚSquashedNormalc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr'   r�   )r[   Úvalues     r-   r]   z(reduce_to_scalar_loss.<locals>.<genexpr>®   s   è ø€ ÐJ¹\°EÔ(¨×/¹\ùrt   ru   )rX   rF   rY   ÚsumÚnumelrd   rc   Úlenry   Ú__name__r}   ÚlogitsÚmeanÚdictÚvaluesÚkeysrx   rz   s    r-   r}   r}   ž   sç   € ä�#”u—|‘|Ô$à�w‰w‹y˜3Ÿ9™9›;Ñ&Ð&Ü	�Cœ$¤˜Ô	'ÜÑ9±SÓ9Ó9¼CÀ»HÑDÐDÜ	ˆc‹×	Ñ	ð  ñ 
ô
 % S§Z¡ZÓ0Ð0Ü	ˆc‹×	Ñ	Ð/Ò	/Ø�x‰x�|‰|‹~ÐÜ	�CœÔ	ÜÑJ¸S¿Z¹Z¼\ÓJÓJÌSØ�H‰H‹JóN
ñ 
ð 	
ô Ð8¼$¸s»)Ó
DÐDr/   c                  óð   — t         j                  j                  t         j                  j                  t        «      d«      } t         j                  j                  | «      st        j                  | «       | S )Nz../debug)ÚosÚpathÚjoinÚdirnameÚ__file__ÚexistsÚmkdir)r“   s    r-   Ú	debug_dirr™   ´   sC   € Ü�7‰7�<‰<œŸ™Ÿ™¬Ó1°:Ó>€DÜ�7‰7�>‰>˜$ÔÜ
�‰�ŒØ€Kr/   ÚcodeÚextrac           	      óJ  — t        t        j                  j                  t	        «       | «      d«      5 }|j                  t        j                  |«      j                  «       › dt        j                  |«      j                  «       › d|› d�«       d d d «       y # 1 sw Y   y xY w)NÚwz

Ú
)	Úopenr’   r“   r”   r™   ÚwriteÚdisÚBytecodeÚinfo)r0   rš   r›   Úfds       r-   Ú
debug_dumpr¥   »   st   € Ü	Œb�g‰g�l‰lœ9›;¨Ó-¨sÔ	3°rØ
�‰Ü�|‰|˜DÓ!×&Ñ&Ó(Ð)¨¬c¯l©l¸4Ó.@×.DÑ.DÓ.FÐ-GÀtÈEÈ7ÐRTÐUô	
÷ 
4×	3Ñ	3ús   ³ABÂB")ÚskipÚframeÚ
cache_sizeÚhooksÚ_r¦   c                óä  — dt         t           dt        ddfd„}t        j                  j                  j                  «       }t        j                  j                  j                  d«      5  |5  t        | j                  «      rt        «       cddd«       cddd«       S t        | j                  «       t        | j                  |«      \  }}t        i dddg dd	it        «       t        «       | j                  g d¬
«      }t        t!        |t#        | j                  |«      j$                  t'        d	d	¬«      «      «      cddd«       cddd«       S # 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)zused to debug jump updatesÚinstructionsÚcode_optionsr%   Nc                 óp   — | j                  dt        d«      «       | j                  dt        d«      «       y )Nr   ÚNOP)Úinsertr   )r¬   r­   s     r-   Úinsert_nopsz&debug_insert_nops.<locals>.insert_nopsÇ   s.   € Ø×Ñ˜AÔ1°%Ó8Ô9Ø×Ñ˜AÔ1°%Ó8Õ9r/   Údebug_insert_nopsFÚ_idr   )r­   Úcompiler_fnÚroot_txÚexportÚexport_constraintsÚframe_stateÚlocal_scopeÚglobal_scopeÚf_codeÚtorch_function_mode_stackÚpackage)Úframe_idÚframe_compile_id)rd   r   rF   Ú_dynamoÚutilsÚget_metrics_contextÚdynamo_timedr   r»   r   r   r   r   ÚlocalsÚglobalsr   r   r   Úguard_managerr   )	r§   r¨   r©   rª   r¦   r±   Úmetrics_contextrš   rH   s	            r-   r²   r²   Â   s   € ð
:¤$¤s¡)ð :¼3ð :À4ó :ô —m‘m×)Ñ)×=Ñ=Ó?€OÜ	�‰×	Ñ	×	)Ñ	)Ð*=Õ	>ÂÜ˜Ÿ™Ô%Ü%Ó'÷ APÀ×	>Ñ	>ô 	�U—\‘\Ô"Ü'¨¯©°kÓB‰ˆˆaÜØØØØØ!Ø ˜
ä›Ü ›Ø—<‘<Ø&(Øô
ˆô !ÜØÜ$ U§\¡\°5Ó9×GÑGÜ 1°qÔ9óó
÷+ APÀ×	>Ñ	>ÇÀú×	>×	>Ñ	>ús1   Á+E&Á.EÂ	E&Â BEÄ>	E&ÅE	ÅE&Å&E/c                   ó|   — e Zd Zd	d„Zdej
                  j                  deej                     de	de
f   fd„Zd	d„Zy)
ÚCompileCounterr%   Nc                 ó2   — d| _         | j                  «        y ©Nr   )Úframe_countÚclear©Úselfs    r-   Ú__init__zCompileCounter.__init__ë   s   € Ø:;ˆÔØ�
‰
�r/   rA   rU   .c                 óÂ   — | xj                   dz  c_         |j                  j                  D ]&  }d|j                  v sŒ| xj                  dz  c_        Œ( |j
                  S )Nr   Úcall)rÌ   rH   ÚnodesÚopÚop_countÚforward)rÏ   rA   rU   Únodes       r-   Ú__call__zCompileCounter.__call__ï   sM   € ð 	×Ò˜AÑÕØ—H‘H—N”NˆDØ˜Ÿ™Ò Ø—’ Ñ"–ð #ð �z‰zÐr/   c                 óp   — t         j                  rt        d«      | _        d| _        y d| _        d| _        y rË   )r   Údebug_disable_compile_counterr   rÌ   rÕ   rÎ   s    r-   rÍ   zCompileCounter.clearø   s2   € Ü×/Ò/Ü0°Ó3ˆDÔð ˆ�ð  !ˆDÔØˆ�r/   ©r%   N)r‹   Ú
__module__Ú__qualname__rÐ   rF   r   ÚGraphModulerd   rY   r   r   rØ   rÍ   r|   r/   r-   rÉ   rÉ   ê   sE   „ óðØ—(‘(×&Ñ&ðØ8<¸U¿\¹\Ñ8Jðà	�#�s�(Ñ	óôr/   rÉ   c                   ó„   — e Zd Zdeddfd„Zdej                  j                  deej                     de
def   fd„Zd
d	„Zy)ÚCompileCounterWithBackendrC   r%   Nc                 óN   — d| _         || _        g | _        | j                  «        y rË   )rÌ   rC   rM   rÍ   )rÏ   rC   s     r-   rÐ   z"CompileCounterWithBackend.__init__  s!   € Ø:;ˆÔØˆŒØ24ˆŒØ�
‰
�r/   rA   rU   .c                 ó  — ddl m} | xj                  dz  c_        |j                  j                  D ]&  }d|j
                  v sŒ| xj                  dz  c_        Œ( | j                  j                  |«         || j                  «      ||«      S )Nr   )Úlookup_backendrÒ   )
Úbackends.registryrã   rÌ   rH   rÓ   rÔ   rÕ   rM   r^   rC   )rÏ   rA   rU   rã   r×   s        r-   rØ   z"CompileCounterWithBackend.__call__  sp   € õ 	6à×Ò˜AÑÕØ—H‘H—N”NˆDØ˜Ÿ™Ò Ø—’ Ñ"–ð #ð 	�‰×Ñ˜2ÔØ+‰~˜dŸl™lÓ+¨B°Ó?Ð?r/   c                 óp   — t         j                  rt        d«      | _        nd| _        d| _        g | _        y rË   )r   rÚ   r   rÌ   rÕ   rM   rÎ   s    r-   rÍ   zCompileCounterWithBackend.clear  s.   € Ü×/Ò/Ü0°Ó3ˆDÕà ˆDÔØˆŒØˆ�r/   rÛ   )r‹   rÜ   rÝ   ÚstrrÐ   rF   r   rÞ   rd   rY   r   r   rØ   rÍ   r|   r/   r-   rà   rà      sW   „ ð ð ¨ó ð
@Ø—(‘(×&Ñ&ð
@Ø8<¸U¿\¹\Ñ8Jð
@à	�#�s�(Ñ	ó
@ôr/   rà   c                   ót   — e Zd Zdd„Zdej
                  j                  deej                     de	de
f   fd„Zy)	ÚEagerAndRecordGraphsr%   Nc                 ó   — g | _         y r'   )rM   rÎ   s    r-   rÐ   zEagerAndRecordGraphs.__init__  s	   € Ø24ˆ�r/   rA   rU   .c                 óP   — | j                   j                  |«       |j                  S r'   )rM   r^   rÖ   )rÏ   rA   rU   s      r-   rØ   zEagerAndRecordGraphs.__call__"  s    € ð 	�‰×Ñ˜2ÔØ�z‰zÐr/   rÛ   ©r‹   rÜ   rÝ   rÐ   rF   r   rÞ   rd   rY   r   r   rØ   r|   r/   r-   rè   rè     s@   „ ó5ðØ—(‘(×&Ñ&ðØ8<¸U¿\¹\Ñ8Jðà	�#�s�(Ñ	ôr/   rè   c                   ót   — e Zd Zdd„Zdej
                  j                  deej                     de	de
f   fd„Zy)	rL   r%   Nc                 ó.   — g | _         g | _        g | _        y r'   )rM   rN   rO   rÎ   s    r-   rÐ   z AotEagerAndRecordGraphs.__init__*  s   € Ø24ˆŒØ57ˆŒØ57ˆ�r/   rA   rU   .c                 óp  ‡ — ‰ j                   j                  |«       dt        j                  j                  dt
        t        j                     dt        dt        f   fˆ fd„}dt        j                  j                  dt
        t        j                     dt        dt        f   fˆ fd„}t        ||||¬«      S )NrA   rU   r%   .c                 óR   •— ‰j                   j                  | «       | j                  S r'   )rN   r^   rÖ   ©rA   rU   rÏ   s     €r-   Úfw_compilerz5AotEagerAndRecordGraphs.__call__.<locals>.fw_compiler4  ó!   ø€ ð �N‰N×!Ñ! "Ô%Ø—:‘:Ðr/   c                 óR   •— ‰j                   j                  | «       | j                  S r'   )rO   r^   rÖ   rð   s     €r-   Úbw_compilerz5AotEagerAndRecordGraphs.__call__.<locals>.bw_compiler:  rò   r/   )rñ   rô   )
rM   r^   rF   r   rÞ   rd   rY   r   r   r   )rÏ   rA   rU   rñ   rô   s   `    r-   rØ   z AotEagerAndRecordGraphs.__call__/  s¤   ø€ ð 	�‰×Ñ˜2Ôð	Ü—‘×$Ñ$ð	Ü6:¼5¿<¹<Ñ6Hð	ä�cœ3�hÑõ	ð	Ü—‘×$Ñ$ð	Ü6:¼5¿<¹<Ñ6Hð	ä�cœ3�hÑõ	ô ØØØ#Ø#ô	
ð 	
r/   rÛ   rë   r|   r/   r-   rL   rL   )  s@   „ ó8ð

Ø—(‘(×&Ñ&ð
Ø8<¸U¿\¹\Ñ8Jð
à	�#�s�(Ñ	ô
r/   rL   c                   ó   — e Zd Zdd„Zd„ Zy)ÚInductorAndRecordGraphsNc                 ó    — g | _         g | _        y r'   )rM   Úinductor_graphsrÎ   s    r-   rÐ   z InductorAndRecordGraphs.__init__I  s   € Ø24ˆŒØ;=ˆÕr/   c                 óò   ‡ ‡— dd l mc m} ‰ j                  j	                  |«       |j
                  Šˆˆ fd„}t        j                  |d|¬«      5  |j                  ||«      cd d d «       S # 1 sw Y   y xY w)Nr   c                  óP   •— ‰j                   j                  | d   «        ‰| i |¤ŽS rË   )rø   r^   )r?   r@   Úold_compile_fx_innerrÏ   s     €€r-   Úpatchedz1InductorAndRecordGraphs.__call__.<locals>.patchedT  s+   ø€ Ø× Ñ ×'Ñ'¨¨Q©Ô0Ù'¨Ð8°Ñ8Ð8r/   Ú_compile_fx_inner)Únew)Útorch._inductor.compile_fxÚ	_inductorÚ
compile_fxrM   r^   rý   r   Úobject)rÏ   rA   rU   Úcompile_fx_modrü   rû   s   `    @r-   rØ   z InductorAndRecordGraphs.__call__M  s\   ù€ ß;Ð;à�‰×Ñ˜2Ôà-×?Ñ?Ðõ	9ô �\‰\˜.Ð*=À7ÖKØ!×,Ñ,¨R°Ó@÷ L×KÒKús   ÁA-Á-A6rÛ   )r‹   rÜ   rÝ   rÐ   rØ   r|   r/   r-   rö   rö   H  s   „ ó>óAr/   rö   c                 ó0   — t        j                  dd| «      S )Nz(?m)^ *#.*\n?r2   r3   )rš   s    r-   Ústrip_commentr  \  r7   r/   c                 ó„   — dj                  | j                  d«      D �cg c]  }|j                  «       ‘Œ c}«      S c c}w )Nrž   )r”   ÚsplitÚrstrip)rš   Úlines     r-   Úremove_trailing_spacer
  `  s4   € Ø�9‰9°·
±
¸4Ô0@ÓAÑ0@¨�d—k‘k•mÐ0@ÑAÓBÐBùÒAs   Ÿ=c                 ó´   — | j                  d«      }g }d}|D ].  }|j                  «       dk(  r|rŒd}nd}|j                  |«       Œ0 dj                  |«      S )Nrž   Fr2   T)r  Ústripr^   r”   )rš   ÚlinesrP   Ú	saw_blankr	  s        r-   Ú_squash_blank_linesr  d  s_   € Ø�J‰J�tÓ€EØ€FØ€IÛˆØ�:‰:‹<˜2ÒÙØØ‰IàˆIØ�‰�dÕð ð �9‰9�VÓÐr/   Úgm_strc                 óD   — t        | «      }t        |«      }t        |«      S r'   )r  r
  r  )r  ÚstrippedÚno_trailings      r-   Únormalize_gmr  s  s#   € ô ˜VÓ$€HÜ'¨Ó1€KÜ˜{Ó+Ð+r/   c                 ó4   — t        j                  dd| «      }|S )z-
    Normalize code: remove empty lines.
    z[\r\n]+rž   r3   )rš   Únormal_codes     r-   Úempty_line_normalizerr  {  s   € ô —&‘&˜ T¨4Ó0€KØÐr/   rÏ   rI   ÚnargsÚexpected_opsÚexpected_ops_dynamicÚexpected_frame_countc                 óØ  — t         j                  s|�|}t        «       }t        |«      D �cg c]  }t	        j
                  dd«      ‘Œ }}t        |«      D �cg c]  }t	        j
                  dd«      ‘Œ }	} ||Ž }
 ||	Ž }t        «         t        |«      |«      } ||Ž } ||	Ž } ||Ž } ||	Ž }t        «        | j                  t        ||
«      «       | j                  t        ||
«      «       | j                  t        ||«      «       | j                  t        ||«      «       | j                  |j                  |«       |�| j                  |j                  |«       y y c c}w c c}w )Né
   )r   Úassume_static_by_defaultrÉ   ÚrangerF   Úrandnr   r   Ú
assertTruer    ÚassertEqualrÌ   rÕ   )rÏ   rI   r  r  r  r  Úactualrª   Úargs1Úargs2Úcorrect1Úcorrect2Úopt_fnÚval1aÚval2aÚval1bÚval2bs                    r-   Ústandard_testr-  ƒ  sA  € ô ×*Ò*Ð/CÐ/OØ+ˆäÓ€Fä*/°¬,Ó7©, QŒU�[‰[˜˜RÕ ¨,€EÐ7Ü*/°¬,Ó7©, QŒU�[‰[˜˜RÕ ¨,€EÐ7Ù�5ˆz€HÙ�5ˆz€HÜ	„GØ$Œ_˜VÓ$ RÓ(€FÙ�EˆN€EÙ�EˆN€EÙ�EˆN€EÙ�EˆN€EÜ	„GØ‡O�O”D˜ Ó)Ô*Ø‡O�O”D˜ Ó)Ô*Ø‡O�O”D˜ Ó)Ô*Ø‡O�O”D˜ Ó)Ô*Ø×Ñ�V×'Ñ'Ð)=Ô>ØÐØ×Ñ˜Ÿ™¨,Õ7ð  ùò! 8ùÚ7s   ¬E"ÁE'rA   c                 ó   — | j                   S r'   )rÖ   )rA   rU   s     r-   Údummy_fx_compiler/  ¤  s   € ð �:‰:Ðr/   ÚspeedupÚpvalueÚ
is_correctÚpvalue_thresholdc                 ó0   — |sy||kD  r| d›d�S | d›d|d›�S )NÚERRORz.3fzx SAMEzx p=z.2fr|   )r0  r1  r2  r3  s       r-   Úformat_speedupr6  ª  s7   € ñ ØØÐ Ò Ø˜#�˜fÐ%Ð%Ø�cˆ]˜$˜v c˜lÐ+Ð+r/   ÚcpuÚsizeÚstrideÚdtypeÚdeviceÚ
extra_sizec                 ó¦  — |}t        d„ | D «       «      r"|t        d„ t        | |«      D «       «      dz   z  }|j                  r`|j                  dk(  r8	 t        j                  |t
        j                  |¬«      j                  |¬«      }n2t        j                  |||¬«      }nt        j                  |g||¬«      }t        j                  || |«      S )Nc              3   ó&   K  — | ]	  }|d kD  –— Œ y­w)r   Nr|   )r[   Úss     r-   r]   zrand_strided.<locals>.<genexpr>¿  s   è ø€ Ð
™$�Qˆ1ˆq�5™$ùs   ‚c              3   ó2   K  — | ]  \  }}|d z
  |z  –— Œ y­w)r   Nr|   )r[   Úshaper9  s      r-   r]   zrand_strided.<locals>.<genexpr>Â  s    è ø€ ÐLÑ:K©¨°�˜‘˜fÕ$Ñ:Kùrt   r   )r:  r;  )r:  )r8  r:  r;  )Úallrˆ   ÚzipÚis_floating_pointÚitemsizerF   r   Úfloat16ÚtoÚzerosÚ
as_strided)r8  r9  r:  r;  r<  Úneeded_sizerl   s          r-   Úrand_stridedrK  ·  sÀ   € ð €KÜ
Ñ
™$Ó
ÔàÜÑL¼#¸dÀFÔ:KÓLÓLÈqÑPñ	
ˆð ×ÒØ�>‰>˜QÒðô —[‘[ ´E·M±MÈ&ÔQ×TÑTØð Uó ‰Fô —[‘[ °EÀ&ÔI‰Fä—‘ ; -°uÀVÔLˆÜ×Ñ˜F D¨&Ó1Ð1r/   Ú_Tc                  ó$   — t         j                   S r'   )r   r  r|   r/   r-   Úcheck_dynamic_shape_capturerN  ×  s   € ä×.Ñ.Ð.Ð.r/   Úpatchesc                 ó”   ‡ ‡— t        j                  ‰ «      dt        j                  dt        j                  dt
        fˆ ˆfd„«       }|S )Nr?   r@   r%   c            	      óÊ   •— t        j                  «       5 }‰D ],  \  }}}|j                  t        j                  |||«      «       Œ.  ‰| i |¤Žcd d d «       S # 1 sw Y   y xY wr'   )Ú
contextlibÚ	ExitStackÚenter_contextr   r  )r?   r@   ÚstackÚmoduleÚattrÚvalrI   rO  s         €€r-   Ú_fnz"_make_fn_with_patches.<locals>._fnÝ  sX   ø€ ä×!Ñ!Ô# uÛ%,Ñ!�˜˜cØ×#Ñ#¤E§L¡L°¸¸sÓ$CÕDð &-ñ �tÐ&˜vÑ&÷	 $×#Ò#ús   –9AÁA")Ú	functoolsÚwrapsr#   r?   r@   rL  )rI   rO  rY  s   `` r-   Ú_make_fn_with_patchesr\  Ü  sB   ù€ Ü‡_�_�RÓð'”2—7‘7ð '¤b§i¡ið '´Bõ 'ó ð'ð €Jr/   c                 ó   — | S r'   r|   r,   s    r-   Ú<lambda>r^  î  s   € Éar/   )Ú
xfail_propÚ	decoratorÚclsÚ
cls_prefixÚ	fn_suffixr_  r`  c          	      óú  — t        |› | j                  › �| j                  i «      }|j                  |_        t	        | «      D ]¶  }|j                  d«      rt        | |«      }t        |«      st        ||t        | |«      «       ŒC|› |› �}	t        |g|¢­Ž }
|	|
_        |�!t        ||«      rt        j                  |
«      }
t        ||	 ||
«      «       Œ“t        ||«      rŒ t        ||t        | |«      «       Œ¸ |S )NÚtest_)ry   r‹   Ú	__bases__rÝ   ÚdirÚ
startswithÚgetattrÚcallableÚsetattrr\  ÚhasattrÚunittestÚexpectedFailure)ra  rb  rc  r_  r`  rO  ÚDummyTestClassr0   rI   Únew_nameÚnew_fns              r-   Úmake_test_cls_with_patchesrr  è  sí   € ô ˜Z˜L¨¯©¨Ð7¸¿¹ÈÓK€NØ"0×"9Ñ"9€NÔä�C–ˆØ�?‰?˜7Ô#Ü˜˜dÓ#ˆBÜ˜B”<Ü˜¨¬g°c¸4Ó.@ÔAØØ˜ 	˜{Ð+ˆHÜ*¨2Ð8°Ò8ˆFØ&ˆFŒOØÐ%¬'°"°jÔ*AÜ!×1Ñ1°&Ó9�Ü�N H©i¸Ó.?Õ@ä˜¨Õ.Ü�N D¬'°#°tÓ*<Õ=ð ð  Ðr/   c                 óV   — t         j                  dk\  r| S t        j                  | «      S )N)r"   é   ©ÚsysÚversion_inform  r¦   ©rI   s    r-   ÚskipIfNotPy311ry    s$   € Ü
×Ñ˜7Ò"Øˆ	ä�=‰=˜ÓÐr/   c                 ób   — t         j                  dk\  r| S  t        j                  d«      | «      S )N©r"   é   zRequires Python 3.12+ru  rx  s    r-   ÚskipIfNotPy312r}    s,   € Ü
×Ñ˜7Ò"Øˆ	Ø1Œ8�=‰=Ð0Ó1°"Ó5Ð5r/   c                 óˆ   — t         j                  dk\  st         j                  dk  r t        j                  d«      | «      S | S )N)r"   é   r{  zRequires Python 3.12ru  rx  s    r-   ÚskipIfOnlyNotPy312r€    s9   € Ü
×Ñ˜7Ò"¤c×&6Ñ&6¸Ò&@Ø4Œx�}‰}Ð3Ó4°RÓ8Ð8Ø€Ir/   c                 óV   — t         j                  dk\  rt        j                  | «      S | S )Nr{  )rv  rw  rm  rn  rx  s    r-   ÚxfailIfPy312r‚    s&   € Ü
×Ñ˜7Ò"Ü×'Ñ'¨Ó+Ð+Ø€Ir/   c                 ób   — t         j                  dk\  r t        j                  d«      | «      S | S )Nr{  zNot supported in Python 3.12+ru  rx  s    r-   ÚskipIfPy312r„     s,   € Ü
×Ñ˜7Ò"Ø=Œx�}‰}Ð<Ó=¸bÓAÐAØ€Ir/   c                 ó   — d| _         | S ©NT)Ú_expected_failure_dynamicrx  s    r-   ÚexpectedFailureDynamicrˆ  (  s   € Ø#'€BÔ Ø€Ir/   c                 ó   — d| _         | S r†  )Ú!_expected_failure_codegen_dynamicrx  s    r-   ÚexpectedFailureCodegenDynamicr‹  .  ó   € Ø+/€BÔ(Ø€Ir/   c                 ó   — d| _         | S r†  )Ú!_expected_failure_dynamic_wrapperrx  s    r-   ÚexpectedFailureDynamicWrapperr�  4  rŒ  r/   Úuse_xlac                 ó  — t        j                  d«       t        j                  d«       t        rt        j                  j                  d«       | r3dd lmc m} |j                  dt        |j                  «       «      «       y y )Ni9  r   )rF   Úmanual_seedÚrandomÚseedr!   Útorch_xla.core.xla_modelÚcoreÚ	xla_modelÚset_rng_stateræ   Ú
xla_device)r�  Úxms     r-   Úreset_rng_stater›  9  sX   € Ü	×Ñ�dÔÜ
‡K�K�ÔÝ	Ü
�	‰	�‰�tÔÙß-Ð-à
×Ñ˜œs 2§=¡=£?Ó3Õ4ð r/   Úfr?   r@   c                 ó   —  | |i |¤ŽS r'   r|   )rœ  r?   r@   s      r-   Ú&_skipped_function_for_test_reconstructrž  D  s   € ñ ˆdÐ�fÑÐr/   c               #   ó4   K  — g a 	 t         –— da y# da w xY w­w)a\  
    Context manager to capture graph modules compiled by invoke_subgraph_inductor_compile.

    Usage:
        with _testing_capture_invoke_subgraph_inductor_compile_gms() as captured_gms:
            # code that triggers invoke_subgraph_inductor_compile
            pass
        # captured_gms will contain the list of captured graph modules
    N)Ú6_testing_invoke_subgraph_inductor_compile_captured_gmsr|   r/   r-   Ú5_testing_capture_invoke_subgraph_inductor_compile_gmsr¡  M  s'   è ø€ ð >@Ð:ðFÜDÒDàAEÑ>øÀÑ>üs   ‚† Ž‘•)r2   )NNr   )Tgš™™™™™¹?)F)zÚ__doc__rR  r¡   rZ  ÚloggingÚos.pathr’   r“  r4   rv  Útypesrm  Úcollections.abcr   r   r   Útypingr   r   r   r	   r
   Útyping_extensionsr   Úunittest.mockr   rF   r   Ú torch._dynamo.backends.debuggingr   Útorch._dynamo.output_graphr   r2   r   r   r   r   Úbytecode_transformationr   r   r   r   Úguardsr   r   r   r   r   r   rÁ   r   r    r!   Ú
ModuleTypeÚ__annotations__ÚnumpyÚModuleNotFoundErrorÚunsupportedÚthreeÚ	getLoggerr‹   Úlogr#   rY   r.   ræ   r6   rJ   rQ   ÚnnÚModulerd   rn   Úboolrr   r}   rc   rŽ   Úfloatr™   ÚCodeTyper¥   rw   r²   rÉ   rà   rè   rL   rö   r  r
  r  r  r  r-  rÞ   r/  r6  Úfloat32r:  r;  rK  rL  rN  r\  ry   rr  ry  r}  r€  r‚  r„  rˆ  r‹  r�  r›  r?   r@   rž  r   Úcontextmanagerr¡  r|   r/   r-   Ú<module>r½     s”  ðòó Û 
Û Û Û Û Û 	Û 
Û Û ß 9Ñ 9ß :Õ :Ý 'Ý ã Ý Ý 6Ý 2ç 8Ó 8÷ó ÷ AÑ @ß IÑ Iß *ð "&€€HˆU×ÑÑÓ %ðÛð
 ×$Ñ$€Ø	€à€g×Ñ˜Ó!€áˆtƒ_€ð>�˜Ÿ™Ñ&ð >¨8°E·L±LÑ+Aó >ð.¨ð .°ó .ò$ò"Hð%Ø�8‰8�?‰?ð%Ø(+ð%Ø36ð%ØHKð%à	ˆ#�Yó%ðP	E˜3ð 	E 4ó 	Eð 
Ø A˜uŸ|™|Ð A°·±Ò Aó 
Ø Að 
ðØ	ˆt�C‰y˜%  S ™/¨4°°S°©>Ð9Ñ	:ðà
òó 
ðð
E˜sð E u¨U¯\©\¸5Ð-@Ñ'Aó Eð,�3ó ñ
�Sð 
 §¡ð 
°sð 
ÀDó 
ð QRò%
Øð%
Ø(+ð%
Ø47ð%
Ø<?ð%
ØJMð%
àó%
÷Pñ ÷,ñ ÷<ñ ÷
ñ 
÷>Añ Að(.˜ð . ó .ðC ð C¨ó Cð˜cð  có ð,˜ð , ó ,ð ð ¨ó ð #'Ø*.Ø !ñ8Ø
ð8à��c�Ñð8ð ð8ð ˜3‘-ð	8ð
 # 3™-ð8ð ð8ð 
ó8ðBØ
�‰ðØ(,¨U¯\©\Ñ(:ðàˆc�3ˆhÑóð Ø!ñ	
,Øð
,àð
,ð ð
,ð ð	
,ð
 	ó
,ð  Ÿ™Ø',Øñ2Ø
�3‰-ð2à�S‰Mð2ð �;‰;ð2ð �#�u—|‘|Ð#Ñ$ð	2ð
 ð2ð ‡\�\ó2ñ: ˆTƒ]€ð/ Tó /ð
	˜h r¨2 vÑ.ð 	¸#ð 	À(È2ÈrÈ6ÑBRó 	ð" !%ÙDOòØ	ðàðð ðð ð	ð
 ˜‘ðð ˜ # s (Ñ+Ð,¨h°s¸C°xÑ.@Ð@ÑAðð 
óð>�x  B Ñ'ð ¨H°R¸°VÑ,<ó ð6�x  B Ñ'ð 6¨H°R¸°VÑ,<ó 6ð˜8 B¨ FÑ+ð °¸¸R¸Ñ0@ó ð�X˜b "˜fÑ%ð ¨(°2°r°6Ñ*:ó ð�H˜R ˜VÑ$ð ¨°"°b°&Ñ)9ó ð˜x¨¨B¨Ñ/ð °H¸RÀ¸VÑ4Dó ð h¨r°2¨vÑ&6ð ¸8ÀBÈÀFÑ;Kó ð h¨r°2¨vÑ&6ð ¸8ÀBÈÀFÑ;Kó ñ
5˜Tð 5¨dó 5ðØ��B�ÑðØ "§¡ðØ35·9±9ðàóð :>Ð 6ð ×ÑðF¸yØˆ�‰×	Ñ	Ññ@ò Fó ñFøðw ò Ø	ƒBðús   Â/O5 Ï5P Ï?P 