
    [ThE?                     t   % S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKJr  SSKJrJrJrJrJrJr  SSKJr  SSKJr  SSKrSSKJr  SSKJr  SS	KJr  S
SKJ r J!r!J"r"J#r#  S
SK$J%r%J&r&J'r'J(r(  S
SK)J*r*J+r+J,r,  S
SK
J-r-J.r.J/r/  S
SK0J1r1  Sr2\\
Rf                     \4S'    SSK5r2\!Rn                  r7Sr8\Rr                  " \:5      r;\" S5      r<S\\Rz                     S\\Rz                     4S jr>S\?S\?4S jr@S rAS\R                  R                  S\S\S\S\D\   4
S jrES\S\F4S jrG\S\Rz                  S\Rz                  4S  j5       rH\S\\D\   \I\S!4   \J\\4   4   S\K4S" j5       rHS\S\\Rz                  \K4   4S# jrHS\?4S$ jrLSgS\?S%\
R                  S&\?SS4S' jjrNSS(.S)\.S*\OS+\S,\S-\OS\-4S. jjrP " S/ S05      rQ " S1 S25      rR " S3 S45      rS " S5 S65      rTS%\?S\?4S7 jrUS%\?S\?4S8 jrVS9\?S\?4S: jrWS%\?S\?4S; jrX   ShS<\S=\S!\4   S>\OS?\\O   S@\\O   SA\OSS4SB jjrYSC\R                  S\D\Rz                     S\S!\4   4SD jr[  SiSE\KSF\KSG\FSH\KS\?4
SI jjr\\R                  SJS4SK\\O   SL\\O   SM\R                  SN\\?\R                  4   SO\OS\Rz                  4SP jjr`\" SQ5      raS\F4SR jrbS=\\<\a4   SS\S\\<\a4   4ST jrcSSU SV.SW\dSX\?SY\?SS\SZ\\?   S[\\S!\4   /\S!\4   4   S\d4S\ jjreS=\S!\4   S\S!\4   4S] jrfS=\S!\4   S\S!\4   4S^ jrgS=\S!\4   S\S!\4   4S_ jrhS=\S!\4   S\S!\4   4S` jriS=\S!\4   S\S!\4   4Sa jrjS=\S!\4   S\S!\4   4Sb jrkS=\S!\4   S\S!\4   4Sc jrlS=\S!\4   S\S!\4   4Sd jrmSjSe\FSS4Sf jjrng! \6 a    Sr2 GNf = f)ka1  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)Sequence)AnyCallable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)samenp   _Pxreturnc                 x    U c  g U R                  5       R                  5       R                  U R                  5      $ N)detachclonerequires_grad_requires_gradr"   s    M/var/www/auris/envauris/lib/python3.13/site-packages/torch/_dynamo/testing.pyclone_mer,   ?   s.    y88:,,Q__==    namec                 2    [         R                  " SSU 5      $ )Nz^_orig_mod[.] resub)r.   s    r+   remove_optimized_module_prefixr4   E       66"B--r-   c                    ^^^ SSK Jm  S mS mUUU4S jn[        R                  " USS9" U 5      " U0 UD6  TR                  T4$ )Nr   )InstructionTranslatorc                 T   > U mTR                  5       R                  R                  mU $ r%   )
current_txoutputregion_tracker)_gmargskwargsr7   gmr;   s      r+   extract_graph_backend8extract_graph_and_tracker.<locals>.extract_graph_backendO   s)     .99;BBQQ
r-   T)backend	fullgraph)torch._dynamo.symbolic_convertr7   torchcompilegraph)fnr=   r>   r@   r7   r?   r;   s       @@@r+   extract_graph_and_trackerrI   I   sD    D	BN 
MM/4@DdUfU88^##r-   model
predictionlossexample_inputsc                 @   / nUR                  U5        UR                  U5        0 n0 nU R                  5        Hk  u  px[        U [        R                  5      (       a  [        U5      nUn	UR                  n
UR                  c  [        R                  " U5      n
XUS-   '   XU'   Mm     UR                  U5        UR                  U5        0 nU R                  5        H3  u  p|[        U [        R                  5      (       a  [        U5      nXU'   M5     UR                  U5        U Ht  n[        U[        [        45      (       a  UR                  S U 5       5        M8  [        U[        R                  5      (       d  MY  UR                  UR                  5        Mv     U$ )Nz.gradc              3   |   #    U  H2  n[        U[        R                  5      (       d  M$  UR                  v   M4     g 7fr%   )
isinstancerE   Tensorgrad).0inps     r+   	<genexpr>"collect_results.<locals>.<genexpr>{   s#     Xw*S%,,:W8388ws   #<<)appendnamed_parametersrP   r   OptimizedModuler4   rR   rE   
zeros_likenamed_bufferstuplelistextendrQ   )rJ   rK   rL   rM   resultsgradsparamsr.   param
param_copyrR   buffersbufferexamples                 r+   collect_resultsrg   Z   sU    GNN:NN4 EF--/eZ77881$7D
zz::##E*D $dWn!t 0 NN5NN6G++-eZ77881$7D . NN7!gt}--NNXwXX'5<<00w||, " Nr-   outc                    [        U [        R                  5      (       a  U R                  $ [        U [        [
        45      (       a  [        S U  5       5      $ U c  g[        U [        5      (       a  g[        S[        U 5      5      e)Nc              3   8   #    U  H  n[        U5      v   M     g 7fr%   )requires_bwd_passrS   r"   s     r+   rU   $requires_bwd_pass.<locals>.<genexpr>   s     5A$Q''   FDon't know how to reduce)
rP   rE   rQ   r)   r]   r\   anyintNotImplementedErrortyperh   s    r+   rk   rk      sk    #u||$$   	C$	'	'5555		C		
8$s)
DDr-   c                     g r%    rt   s    r+   reduce_to_scalar_lossrw      s    >Ar-   .c                     g r%   rv   rt   s    r+   rw   rw      s     r-   c                 ~   [        U [        R                  5      (       a!  U R                  5       U R	                  5       -  $ [        U [
        [        45      (       a  [        S U  5       5      [        U 5      -  $ [        U 5      R                  S;   a  [        U R                  5      $ [        U 5      R                  S:X  a  U R                  R                  5       $ [        U [        5      (       a:  [        S U R                  5        5       5      [        U R                  5       5      -  $ [!        S[        U 5      5      e)z/Reduce the output of a model to get scalar lossc              3   8   #    U  H  n[        U5      v   M     g 7fr%   rw   rl   s     r+   rU   (reduce_to_scalar_loss.<locals>.<genexpr>   s     9S(++Srn   )MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsSquashedNormalc              3   8   #    U  H  n[        U5      v   M     g 7fr%   r{   )rS   values     r+   rU   r|      s     J\E(//\rn   ro   )rP   rE   rQ   sumnumelr]   r\   lenrs   __name__rw   logitsmeandictvalueskeysrr   rt   s    r+   rw   rw      s    #u||$$wwy399;&&	C$	'	'9S99CHDD	c		   

 %SZZ00	c		/	/xx||~	C		JSZZ\JJSHHJN
 
 	
 8$s)
DDr-   c                      [         R                  R                  [         R                  R                  [        5      S5      n [         R                  R                  U 5      (       d  [         R                  " U 5        U $ )Nz../debug)ospathjoindirname__file__existsmkdir)r   s    r+   	debug_dirr      sF    77<<1:>D77>>$
Kr-   codeextrac           	      X   [        [        R                  R                  [	        5       U 5      S5       nUR                  [        R                  " U5      R                  5        S[        R                  " U5      R                  5        SU S35        S S S 5        g ! , (       d  f       g = f)Nwz


)	openr   r   r   r   writedisBytecodeinfo)r.   r   r   fds       r+   
debug_dumpr      st    	bggll9;-s	3r
||D!&&()cll4.@.D.D.F-GtE7RTU	
 
4	3	3s   AB
B))skipframe
cache_sizehooks_r   c                   S[         [           S[        SS4S jn[        R                  R                  R                  5       n[        R                  R                  R                  S5         U   [        U R                  5      (       a  [        5       sSSS5        sSSS5        $ [        U R                  5        [        U R                  U5      n[        0 SSSSSS	0[        5       [        5       U R                  / S
9
n[        [!        U[#        U R                  U5      R$                  ['        S	S	S95      5      sSSS5        sSSS5        $ ! , (       d  f       O= fSSS5        g! , (       d  f       g= f)zused to debug jump updatesinstructionscode_optionsr#   Nc                 p    U R                  S[        S5      5        U R                  S[        S5      5        g )Nr   NOP)insertr   )r   r   s     r+   insert_nops&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)frame_idframe_compile_id)r]   r   rE   _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   rG   s	            r+   r   r      s   
:$s) :3 :4 : mm))==?O				)	)*=	>%%%' AP	>	> 	U\\"$U\\;?#
 <<&(
 !$U\\59GG1q9
) AP	>	>	>	>	>s1   ,E'/$E	E'&BE:	E'
E	E''
E5c                       \ rS rSrSS jrS\R                  R                  S\\R                     S\
S\4   4S jrSS	 jrS
rg)CompileCounter   r#   Nc                      SU l         SU l        g Nr   frame_countop_countselfs    r+   __init__CompileCounter.__init__       r-   r?   rM   .c                     U =R                   S-  sl         UR                  R                   H*  nSUR                  ;   d  M  U =R                  S-  sl        M,     UR
                  $ )Nr   call)r   rG   nodesopr   forward)r   r?   rM   nodes       r+   __call__CompileCounter.__call__   sM     	AHHNND " # zzr-   c                      SU l         SU l        g r   r   r   s    r+   clearCompileCounter.clear   r   r-   r   r#   N)r   
__module____qualname____firstlineno__r   rE   r   GraphModuler]   rQ   r   r   r   r   __static_attributes__rv   r-   r+   r   r      sE    ((&&8<U\\8J	#s(	r-   r   c                       \ rS rSrS\SS4S jrS\R                  R                  S\	\R                     S\S\4   4S	 jrSS
 jrSrg)CompileCounterWithBackend   rB   r#   Nc                 :    SU l         SU l        Xl        / U l        g r   )r   r   rB   graphs)r   rB   s     r+   r   "CompileCounterWithBackend.__init__   s    24r-   r?   rM   .c                 &   SSK Jn  U =R                  S-  sl        UR                  R                   H*  nSUR
                  ;   d  M  U =R                  S-  sl        M,     U R                  R                  U5        U" U R                  5      " X5      $ )Nr   )lookup_backendr   )
backends.registryr   r   rG   r   r   r   r   rW   rB   )r   r?   rM   r   r   s        r+   r   "CompileCounterWithBackend.__call__   sl     	6AHHNND " # 	2dll+B??r-   c                 .    SU l         SU l        / U l        g r   )r   r   r   r   s    r+   r   CompileCounterWithBackend.clear	  s    r-   )rB   r   r   r   r   )r   r   r   r   strr   rE   r   r   r]   rQ   r   r   r   r   r   rv   r-   r+   r   r      sW    5 5 5
@((&&
@8<U\\8J
@	#s(	
@r-   r   c                       \ rS rSrS
S jrS\R                  R                  S\\R                     S\
S\4   4S jrS	rg)EagerAndRecordGraphsi  r#   Nc                     / U l         g r%   r   r   s    r+   r   EagerAndRecordGraphs.__init__  s	    24r-   r?   rM   .c                 P    U R                   R                  U5        UR                  $ r%   )r   rW   r   )r   r?   rM   s      r+   r   EagerAndRecordGraphs.__call__  s      	2zzr-   r   r   r   r   r   r   r   rE   r   r   r]   rQ   r   r   r   r   rv   r-   r+   r   r     s@    5((&&8<U\\8J	#s(	r-   r   c                       \ rS rSrS
S jrS\R                  R                  S\\R                     S\
S\4   4S jrS	rg)AotEagerAndRecordGraphsi  r#   Nc                 .    / U l         / U l        / U l        g r%   )r   	fw_graphs	bw_graphsr   s    r+   r    AotEagerAndRecordGraphs.__init__  s    245757r-   r?   rM   .c                 r  ^  T R                   R                  U5        S[        R                  R                  S[
        [        R                     S[        S[        4   4U 4S jjnS[        R                  R                  S[
        [        R                     S[        S[        4   4U 4S jjn[        UUUUS9$ )Nr?   rM   r#   .c                 R   > TR                   R                  U 5        U R                  $ r%   )r   rW   r   r?   rM   r   s     r+   fw_compiler5AotEagerAndRecordGraphs.__call__.<locals>.fw_compiler'  !     NN!!"%::r-   c                 R   > TR                   R                  U 5        U R                  $ r%   )r   rW   r   r   s     r+   bw_compiler5AotEagerAndRecordGraphs.__call__.<locals>.bw_compiler-  r  r-   )r   r  )
r   rW   rE   r   r   r]   rQ   r   r   r   )r   r?   rM   r   r  s   `    r+   r    AotEagerAndRecordGraphs.__call__"  s     	2	$$	6:5<<6H	c3h		$$	6:5<<6H	c3h	 ##	
 	
r-   )r   r   r   r   r   rv   r-   r+   r   r     s@    8

((&&
8<U\\8J
	#s(	
r-   r   c                 2    [         R                  " SSU 5      $ )Nz(?m)^ *#.*\n?r0   r1   )r   s    r+   strip_commentr  ;  r5   r-   c                     SR                  U R                  S5       Vs/ s H  oR                  5       PM     sn5      $ s  snf )Nr   )r   splitrstrip)r   lines     r+   remove_trailing_spacer  ?  s2    99

40@A0@kkm0@ABBAs   ?gm_strc                 *    [        [        U 5      5      $ r%   )r  r  )r  s    r+   normalize_gmr  C  s     !v!677r-   c                 6    [         R                  " SSU 5      nU$ )z%
Normalize code: remove empty lines.
z[\r\n]+r   r1   )r   normal_codes     r+   empty_line_normalizerr  I  s     &&T40Kr-   r   rH   nargsexpected_opsexpected_ops_dynamicexpected_frame_countc                    [         R                  (       d  Ub  Un[        5       n[        U5       Vs/ s H  n[        R
                  " SS5      PM     nn[        U5       Vs/ s H  n[        R
                  " SS5      PM     n	nU" U6 n
U" U	6 n[        5         [        U5      " U5      nU" U6 nU" U	6 nU" U6 nU" U	6 n[        5         U R                  [        X5      5        U R                  [        X5      5        U R                  [        X5      5        U R                  [        UU5      5        U R                  UR                  U5        Ub  U R                  UR                  U5        g g s  snf s  snf )N
   )r   assume_static_by_defaultr   rangerE   randnr   r   
assertTruer   assertEqualr   r   )r   rH   r  r  r  r  actualr   args1args2correct1correct2opt_fnval1aval2aval1bval2bs                    r+   standard_testr(  Q  s9    **/C/O+F*/,7,QU[[R ,E7*/,7,QU[[R ,E75zH5zH	GV$R(FENEENEENEENE	GOOD)*OOD)*OOD)*OOD)*V'')=>,7  ! 87s   !E."!E3r?   c                     U R                   $ r%   )r   )r?   rM   s     r+   dummy_fx_compiler*  r  s     ::r-   speeduppvalue
is_correctpvalue_thresholdc                 :    U(       d  gX:  a  U S S3$ U S SUS 3$ )NERRORz.3fzx SAMEzx p=z.2frv   )r+  r,  r-  r.  s       r+   format_speedupr1  x  s4      #f%%c]$vcl++r-   cpusizestridedtypedevice
extra_sizec                 r   [        S [        X5       5       5      S-   U-   nUR                  (       aY  UR                  S:X  a3   [        R
                  " U[        R                  US9R                  US9nO,[        R
                  " XRUS9nO[        R                  " U/X#S9n[        R                  " X`U5      $ )Nc              3   6   #    U  H  u  pUS -
  U-  v   M     g7f)r   Nrv   )rS   shaper4  s      r+   rU   rand_strided.<locals>.<genexpr>  s     H6G]UUQY& 6Gs   r   )r5  r6  )r5  )r3  r5  r6  )
r   zipis_floating_pointitemsizerE   r  float16tozeros
as_strided)r3  r4  r5  r6  r7  needed_sizere   s          r+   rand_stridedrD    s     	Hc$6GHH
	
	 
 >>Q [[EMM&QTT U F [[&IF;-uLF&11r-   _Tc                  ,    [         R                  (       + $ r%   )r   r  rv   r-   r+   check_dynamic_shape_capturerG    s    ....r-   patchesc                    ^ ^ [         R                  " T 5      S[        R                  S[        R                  S[
        4U U4S jj5       nU$ )Nr=   r>   r#   c            	         > [         R                  " 5        nT H,  u  p4nUR                  [        R                  " X4U5      5        M.     T" U 0 UD6sS S S 5        $ ! , (       d  f       g = fr%   )
contextlib	ExitStackenter_contextr   object)r=   r>   stackmoduleattrvalrH   rH  s         r+   _fn"_make_fn_with_patches.<locals>._fn  sT    !!#u%,!c##ELLs$CD &- t&v&	 $##s   :A
A))	functoolswrapsr!   r=   r>   rE  )rH   rH  rS  s   `` r+   _make_fn_with_patchesrW    sB    __R'277 'bii 'B ' ' Jr-   c                     U $ r%   rv   r*   s    r+   <lambda>rY    s    ar-   )
xfail_prop	decoratorcls
cls_prefix	fn_suffixrZ  r[  c          	         [        U U R                   3U R                  0 5      nUR                  Ul        [	        U 5       H  nUR                  S5      (       a  [        X5      n[        U5      (       d  [        Xg[        X5      5        MK  U U 3n	[        U/UQ76 n
Xl        Ub&  [        X5      (       a  [        R                  " U
5      n
[        XiU" U
5      5        M  [        Xg5      (       a  M  [        Xg[        X5      5        M     U$ )Ntest_)rs   r   	__bases__r   dir
startswithgetattrcallablesetattrrW  hasattrunittestexpectedFailure)r\  r]  r^  rZ  r[  rH  DummyTestClassr.   rH   new_namenew_fns              r+   make_test_cls_with_patchesrm    s     ZL7KN"0"9"9NC??7###BB<<gc.@A	{+H*288F&O%'"*A*A!11&9Ni.?@..N'#*<=   r-   c                 Z    [         R                  S:  a  U $ [        R                  " U 5      $ )N)r       sysversion_inforh  r   rH   s    r+   skipIfNotPy311rt    s$    
7"	==r-   c                 f    [         R                  S:  a  U $ [        R                  " S5      " U 5      $ )Nr       zRequires Python 3.12+rp  rs  s    r+   skipIfNotPy312rx    s*    
7"	==01"55r-   c                 Z    [         R                  S:  a  [        R                  " U 5      $ U $ )Nrv  )rq  rr  rh  ri  rs  s    r+   xfailIfPy312rz    s&    
7"''++Ir-   c                 f    [         R                  S:  a  [        R                  " S5      " U 5      $ U $ )Nrv  zNot supported in Python 3.12+rp  rs  s    r+   skipIfPy312r|    s*    
7"}}<=bAAIr-   c                 f    [         R                  S:  a  U $ [        R                  " S5      " U 5      $ )N)r    r  zRequires Python 3.10+rp  rs  s    r+   requiresPy310r~    s*    
7"	}}45b99r-   c                     SU l         U $ NT)_expected_failure_dynamicrs  s    r+   expectedFailureDynamicr    s    #'B Ir-   c                     SU l         U $ r  )!_expected_failure_codegen_dynamicrs  s    r+   expectedFailureCodegenDynamicr        +/B(Ir-   c                     SU l         U $ r  )!_expected_failure_dynamic_wrapperrs  s    r+   expectedFailureDynamicWrapperr    r  r-   use_xlac                 $   [         R                  " S5        [        R                  " S5        [        (       a  [        R                  R                  S5        U (       a3  SS KJs  Jn  UR                  S[        UR                  5       5      5        g g )Ni9  r   )rE   manual_seedrandomseedr   torch_xla.core.xla_modelcore	xla_modelset_rng_stater   
xla_device)r  xms     r+   reset_rng_stater    sZ    	d
KK	r
		t--
s2==?34 r-   )r0   )NNr   )Tg?)F)o__doc__rK  r   rU  loggingos.pathr   r  r2   rq  typesrh  collections.abcr   typingr   r   r   r   r   r	   typing_extensionsr
   unittest.mockr   rE   r    torch._dynamo.backends.debuggingr   torch._dynamo.output_graphr   r0   r   r   r   r   bytecode_transformationr   r   r   r   guardsr   r   r   r   r   r   r   r   r   
ModuleType__annotations__numpyModuleNotFoundErrorunsupportedthree	getLoggerr   logr!   rQ   r,   r   r4   rI   nnModuler]   rg   boolrk   rw   r\   r   floatr   CodeTyper   rq   r   r   r   r   r   r  r  r  r  r(  r   r*  r1  float32r5  r6  rD  rE  rG  rW  rs   rm  rt  rx  rz  r|  r~  r  r  r  r  rv   r-   r+   <module>r     s    
     	 
   $ D D '    6 2 8 8  A @ I I  "&HU %
 $$	!t_>& >8ELL+A >. . .$"%88??%(+%36%HK%	#Y%P	E3 	E4 	E 
 Au|| A A 
 A 
	tCy%S/4S>9	:
 

Es EuU\\5-@'A E,3 
S 
 
s 
D 
 QR$
$
(+$
47$
<?$
JM$
$
N & 6 
 
>. . .C C C8 8 8   #'*. !8
8c8 8 3-	8
 #3-8 8 
8B
(,U\\(:c3h !	
,
,
, 
, 	
,
 	
,  ',2
3-2SM2 ;;2 #u||#$	2
 2 \\28 T]/T /
	hr2v. 	# 	(2r6BR 	" !%DO	  	
  #s(+,hsCx.@@A 
>xS) hsCx.@ 6xS) 6hsCx.@ 6Xc3h' HS#X,> HS#X& 8CH+= :hsCx( :Xc3h-? :xS1 hsCx6H hsCx&8 Xc3h=O hsCx&8 Xc3h=O 
5T 5d 5g  	Bs   +N+ +N76N7