
    ɯwga-                     T   U 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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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e	jN                     e(d<   	 d dl)Z&ejV                  Z+dZ, ejZ                  e.      Z/d Z0de1fdZ2d Z3d Z4d Z5de1fdZ6d;de	jn                  ddfdZ8d dde9dee#   fdZ: G d d      Z; G d d      Z< G d d      Z=de1fdZ>de1fd Z?de1fd!Z@de1de1fd"ZA	 	 	 d<d#ZBd$ej                  fd%ZDd=d&ZEej                  d'd fd(ee9   d)ee9   d*ej                  d+ee1ej                  f   d,e9f
d-ZId. ZJdd/ d0d1ZKd2 ZLd3 ZMd4 ZNd5 ZOd6 ZPd7 ZQd8 ZRd9 ZSd>d:ZTy# e*$ r dZ&Y w xY w)?    N)ListOptionalSequenceUnion)patch)fx)OutputGraph   )config
eval_frameoptimize_assertreset)create_instructiondebug_checksis_generatortransform_code_object)CheckFunctionManager	CompileIdGuardedCode)samenp   c                 v    | y | j                         j                         j                  | j                        S N)detachclonerequires_grad_requires_gradxs    Z/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/_dynamo/testing.pyclone_mer"   +   s.    y88:,,Q__==    returnc                 0    t        j                  dd|       S )Nz^_orig_mod[.] resub)names    r!   remove_optimized_module_prefixr+   1   s    66"B--r#   c                 X   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 ]  }t        |t        t        f      r>|D ]8  }t        |t        j                        s|j                  |j                         : Wt        |t        j                        sr|j                  |j                          |S )Nz.grad)appendnamed_parameters
isinstancer   OptimizedModuler+   gradtorch
zeros_likenamed_bufferstuplelistTensor)model
predictionlossexample_inputsresultsgradsparamsr*   param
param_copyr1   buffersbufferexampleinps                  r!   collect_resultsrE   5   s}   GNN:NN4 EF--/ 	"eeZ7781$7D
zz::##E*D $dWn!t	" NN5NN6G++- feZ7781$7D NN7! -gt}- -c5<<0NN388,- '5<<0w||,- Nr#   c                     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.0r    s     r!   	<genexpr>z$requires_bwd_pass.<locals>.<genexpr>a   s     5A$Q'5   FDon't know how to reduce)
r/   r2   r7   r   r6   r5   anyintNotImplementedErrortypeouts    r!   rH   rH   ]   sb    #u||$   	C$	'5555		C	
8$s)
DDr#   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   reduce_to_scalar_lossrI   s     r!   rK   z(reduce_to_scalar_loss.<locals>.<genexpr>o   s     9(+9rL   )MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsSquashedNormalc              3   2   K   | ]  }t        |        y wr   rV   )rJ   values     r!   rK   z(reduce_to_scalar_loss.<locals>.<genexpr>y   s     JE(/JrL   rM   )r/   r2   r7   sumnumelr6   r5   lenrQ   __name__rW   logitsmeandictvalueskeysrP   rR   s    r!   rW   rW   i   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                      t         j                  j                  t         j                  j                  t              d      } t         j                  j                  |       st        j                  |        | S )Nz../debug)ospathjoindirname__file__existsmkdir)ri   s    r!   	debug_dirro      sC    77<<1:>D77>>$
Kr#   codec           	      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


)	openrh   ri   rj   ro   writedisBytecodeinfo)r*   rp   extrafds       r!   
debug_dumpr{      s}    	bggll9;-s	3 
r
||D!&&()cll4.@.D.D.F-GtE7RTU	

 
 
s   ABB")skipr|   c                >   d }t        | j                        ryt        | j                         t        | j                  |      }t	        i ddddddit               t               | j                  	      }t        |t        |      j                  t        dd            S )zused to debug jump updatesc                 p    | j                  dt        d             | j                  dt        d             y )Nr   NOP)insertr   )instructionscode_optionss     r!   insert_nopsz&debug_insert_nops.<locals>.insert_nops   s.    A1%89A1%89r#   NF_idr   )	r   compiler_fnroot_txexportexport_constraintsframe_statelocal_scopeglobal_scopef_code)r   r   r   r   r	   localsglobalsr   r   check_fnr   )frame
cache_sizehooks_r|   r   rp   graphs           r!   debug_insert_nopsr      s    
: ELL! {;DAJHY||E t1%8AA9QPQ?SSr#   c                   j    e Zd Zd Zdej
                  j                  deej                     fdZ	d Z
y)CompileCounterc                      d| _         d| _        y Nr   frame_countop_countselfs    r!   __init__zCompileCounter.__init__       r#   gmr;   c                     | xj                   dz  c_         |j                  j                  D ]&  }d|j                  v s| xj                  dz  c_        ( |j
                  S )Nr
   call)r   r   nodesopr   forward)r   r   r;   nodes       r!   __call__zCompileCounter.__call__   sP    AHHNN 	#D "	# zzr#   c                      d| _         d| _        y r   r   r   s    r!   clearzCompileCounter.clear   r   r#   N)ra   
__module____qualname__r   r2   r   GraphModuler   r7   r   r    r#   r!   r   r      s2    588// ellAS r#   r   c                   d    e Zd Zd Zdej
                  j                  deej                     fdZ	y)CompileCounterWithBackendc                 <    d| _         d| _        || _        g | _        y r   )r   r   backendgraphs)r   r   s     r!   r   z"CompileCounterWithBackend.__init__   s    r#   r   r;   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   r   r   r   r   r   r-   r   )r   r   r;   r   r   s        r!   r   z"CompileCounterWithBackend.__call__   ss    5AHHNN 	#D "	# 	2+~dll+B??r#   N
ra   r   r   r   r2   r   r   r   r7   r   r   r#   r!   r   r      s0    @588// @ellAS @r#   r   c                   d    e Zd Zd Zdej
                  j                  deej                     fdZ	y)EagerAndRecordGraphsc                     g | _         y r   )r   r   s    r!   r   zEagerAndRecordGraphs.__init__   s	    r#   r   r;   c                 P    | j                   j                  |       |j                  S r   )r   r-   r   )r   r   r;   s      r!   r   zEagerAndRecordGraphs.__call__   s    2zzr#   Nr   r   r#   r!   r   r      s-    588// ellAS r#   r   c                 F    t        |       } t        j                  dd|       S )Nz(?m)^ *#.*\n?r&   )strr(   r)   )rp   s    r!   strip_commentr      s    t9D66"B--r#   c                     dj                  | j                  d      D cg c]  }|j                          c}      S c c}w )Nrs   )rj   splitrstrip)rp   lines     r!   remove_trailing_spacer      s.    99

40@AdkkmABBAs   =c                 *    t        t        |             S r   )r   r   )gm_strs    r!   normalize_gmr      s     !v!677r#   c                 4    t        j                  dd|       }|S )z-
    Normalize code: remove empty lines.
    z[\r\n]+rs   r'   )rp   normal_codes     r!   empty_line_normalizerr      s     &&T40Kr#   c                    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   ranger2   randnr   r   
assertTruer   assertEqualr   r   )r   fnnargsexpected_opsexpected_ops_dynamicexpected_frame_countactualr   args1args2correct1correct2opt_fnval1aval2aval1bval2bs                    r!   standard_testr      s?    **/C/O+F*/,7QU[[R 7E7*/,7QU[[R 7E75zH5zH	G$_V$R(FENEENEENEENE	GOOD)*OOD)*OOD)*OOD)*V'')=>,7  ! 87s   E"E'r   c                     | j                   S r   )r   )r   r;   s     r!   dummy_fx_compiler     s    ::r#   c                 0    |sy||kD  r| ddS | dd|dS )NERRORz.3fzx SAMEzx p=z.2fr   )speeduppvalue
is_correctpvalue_thresholds       r!   format_speedupr     s5      #f%%c]$vcl++r#   cpusizestridedtypedevice
extra_sizec                 ~   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   2   K   | ]  \  }}|d z
  |z    yw)r
   Nr   )rJ   shaper   s      r!   rK   zrand_strided.<locals>.<genexpr>%  s     H]UFUQY& HrL   r
   )r   r   )r   )r   r   r   )
r^   zipis_floating_pointitemsizer2   r   float16tozeros
as_strided)r   r   r   r   r   needed_sizerB   s          r!   rand_stridedr     s     	Hc$6GHH
	
	 
 >>Q [[EMM&QTT U F [[E&IF;-uVLFD&11r#   c                 F     t        j                          fd       }|S )Nc            	          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   object)argskwargsstackmoduleattrvalr   patchess         r!   _fnz"_make_fn_with_patches.<locals>._fn:  sh    !!# 	'u%, E!c##ELLs$CDE t&v&		' 	' 	's   9AA")	functoolswraps)r   r  r	  s   `` r!   _make_fn_with_patchesr  9  s%    __R' ' Jr#   c                     | S r   r   r   s    r!   <lambda>r  F  s    q r#   )
xfail_prop	decoratorc          	         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_)rQ   ra   	__bases__r   dir
startswithgetattrcallablesetattrr  hasattrunittestexpectedFailure)cls
cls_prefix	fn_suffixr  r  r  DummyTestClassr*   r   new_namenew_fns              r!   make_test_cls_with_patchesr"  E  s     ZL7KN"0"9"9NC >??7#d#BB<gc4.@A	{+H*288F&FO%'"j*A!11&9NHi.?@.ND'#t*<=>  r#   c                 V    t         j                  dk\  r| S t        j                  |       S )N)r      sysversion_infor  r|   r   s    r!   skipIfNotPy311r)  _  $    
7"	==r#   c                 V    t         j                  dk\  r| S t        j                  |       S N)r      r%  r(  s    r!   skipIfNotPy312r.  e  r*  r#   c                 V    t         j                  dk\  rt        j                  |       S | S r,  )r&  r'  r  r  r(  s    r!   xfailIfPy312r0  k  s&    
7"''++Ir#   c                 V    t         j                  dk\  rt        j                  |       S | S r,  r%  r(  s    r!   skipIfPy312r2  q  s$    
7"}}R  Ir#   c                 X    t         j                  dk\  r| S t        j                  |        y )N)r   r   r%  r(  s    r!   requiresPy310r4  w  s!    
7"	br#   c                     d| _         | S NT)_expected_failure_dynamicr(  s    r!   expectedFailureDynamicr8    s    #'B Ir#   c                     d| _         | S r6  )!_expected_failure_codegen_dynamicr(  s    r!   expectedFailureCodegenDynamicr;        +/B(Ir#   c                     d| _         | S r6  )!_expected_failure_dynamic_wrapperr(  s    r!   expectedFailureDynamicWrapperr?    r<  r#   c                    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   )r2   manual_seedrandomseedr   torch_xla.core.xla_modelcore	xla_modelset_rng_stater   
xla_device)use_xlaxms     r!   reset_rng_staterK    sX    	d
KK	
		t--
s2==?34 r#   )r&   )NNr
   )Tg?)F)Ur   rv   r
  loggingos.pathrh   rB  r(   r&  typesr  typingr   r   r   r   unittest.mockr   r2   r   torch._dynamo.output_graphr	   r&   r   r   r   r   bytecode_transformationr   r   r   r   guardsr   r   r   utilsr   r   
ModuleType__annotations__numpyModuleNotFoundErrorunsupportedthree	getLoggerra   logr"   r   r+   rE   rH   rW   ro   CodeTyper{   rO   r   r   r   r   r   r   r   r   r   r   r   r   float32r   r   r   r  r"  r)  r.  r0  r2  r4  r8  r;  r?  rK  r   r#   r!   <module>r_     s,    
     	 
   2 2    2 8 8  A @  "&HU %
 $$	g!>.C .%P	EE,3 
5>> 
 
 12T*-TkT< "@ @( .3 .
C3 C8C 8   8B , ',2
3-2SM2 ;;2 #u||#$	2
 28	 6:[4
5a  	Bs   	F F'&F'