
    קga-                     <   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	j'                 e(d<   	 d dl)Z&n# e*$ r dZ&Y nw xY wej+        Z+dZ, ej-        e.          Z/d Z0de1fdZ2d Z3d Z4d Z5de1fdZ6d?de	j7        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jC        fd&ZDdAd)ZEejF        d*d fd+ee9         d,ee9         d-ejG        d.ee1ejH        f         d/e9f
d0ZId1 ZJdd2 d3d4ZKd5 ZLd6 ZMd7 ZNd8 ZOd9 ZPd: ZQd; ZRd< ZSdBd>ZTdS )C    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                     | d S |                                                                                      | j                  S N)detachclonerequires_grad_requires_gradxs    Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/testing.pyclone_mer"   +   s6    yt88::,,Q_===    returnc                 .    t          j        dd|           S )Nz^_orig_mod[.] resub)names    r!   remove_optimized_module_prefixr+   1   s    6"B---r#   c                 ~   g }|                     |           |                     |           i }i }|                                 D ]_\  }}t          | t          j                  rt          |          }|}	|j        }
|j        t          j        |          }
|
||dz   <   |	||<   `|                     |           |                     |           i }| 	                                D ]3\  }}t          | t          j                  rt          |          }|||<   4|                     |           |D ]}t          |t          t          f          r:|D ]6}t          |t          j                  r|                     |j                   7Xt          |t          j                  r|                     |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88 	81$77D
z:#E**D $dWn!tNN5NN6G++--  feZ788 	81$77DNN7! - -gt}-- 	- - -c5<00 -NN38,,,- '5<00 -w|,,,Nr#   c                    t          | t          j                  r| j        S t          | t          t
          f          rt          d | D                       S | dS t          | t                    rdS t          dt          |                     )Nc              3   4   K   | ]}t          |          V  d S r   )requires_bwd_pass.0r    s     r!   	<genexpr>z$requires_bwd_pass.<locals>.<genexpr>a   s+      55A$Q''555555r#   FDon't know how to reduce)
r/   r2   r7   r   r6   r5   anyintNotImplementedErrortypeouts    r!   rH   rH   ]   s    #u|$$   	C$	'	' 55555555	u	C		 u
8$s))
D
DDr#   c                    t          | t          j                  r)|                                 |                                 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                                        S t          | t                    rMt          d |                                 D                       t          |                                           z  S t!          dt          |                     )z/Reduce the output of a model to get scalar lossc              3   4   K   | ]}t          |          V  d S r   reduce_to_scalar_lossrI   s     r!   rK   z(reduce_to_scalar_loss.<locals>.<genexpr>o   s+      99(++999999r#   )MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsSquashedNormalc              3   4   K   | ]}t          |          V  d S r   rU   )rJ   values     r!   rK   z(reduce_to_scalar_loss.<locals>.<genexpr>y   s+      JJE(//JJJJJJr#   rL   )r/   r2   r7   sumnumelr6   r5   lenrP   __name__rV   logitsmeandictvalueskeysrO   rQ   s    r!   rV   rV   i   s1   #u|$$ 
wwyy399;;&&	C$	'	' 
99S99999CHHDD	c	   
 

 %SZ000	c	/	/	/x||~~	C		 
JJSZZ\\JJJJJSHHJJN
 N
 
 	
 8$s))
D
DDr#   c                      t           j                            t           j                            t                    d          } t           j                            |           st          j        |            | S )Nz../debug)ospathjoindirname__file__existsmkdir)rh   s    r!   	debug_dirrn      sM    7<<11:>>D7>>$ 
Kr#   r&   codec           	      x   t          t          j                            t	                      |           d          5 }|                    t          j        |                                           dt          j        |                                           d| d           d d d            d S # 1 swxY w Y   d S )Nwz


)	openrg   rh   ri   rn   writedisBytecodeinfo)r*   ro   extrafds       r!   
debug_dumprz      s    	bgll9;;--s	3	3 
r
|D!!&&((UUcl4.@.@.D.D.F.FUUEUUU	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A'B//B36B3)skipr{   c                V   d }t          | j                  rdS 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                     |                      dt          d                     |                      dt          d                     d S )Nr   NOP)insertr   )instructionscode_optionss     r!   insert_nopsz&debug_insert_nops.<locals>.insert_nops   sF    A1%88999A1%889999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   ro   graphs           r!   debug_insert_nopsr      s    
: : : EL!! t {;;DAJHHYY|  E t1%88A9QPQ??SSSr#   c                   T    e Zd Zd Zdej        j        deej                 fdZ	d Z
dS )CompileCounterc                 "    d| _         d| _        d S 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 r| xj        dz  c_        |j        S )Nr
   call)r   r   nodesopr   forward)r   r   r;   nodes       r!   __call__zCompileCounter.__call__   sO    AHN 	# 	#D  "zr#   c                 "    d| _         d| _        d S r   r   r   s    r!   clearzCompileCounter.clear   r   r#   N)r`   
__module____qualname__r   r2   r   GraphModuler   r7   r   r    r#   r!   r   r      s`          58/ elAS        r#   r   c                   N    e Zd Zd Zdej        j        deej                 fdZ	dS )CompileCounterWithBackendc                 >    d| _         d| _        || _        g | _        d S 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 r| xj        dz  c_        | 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__   s    555555AHN 	# 	#D  "2+~~dl++B???r#   N
r`   r   r   r   r2   r   r   r   r7   r   r   r#   r!   r   r      sY          @58/ @elAS @ @ @ @ @ @r#   r   c                   N    e Zd Zd Zdej        j        deej                 fdZ	dS )EagerAndRecordGraphsc                     g | _         d S r   )r   r   s    r!   r   zEagerAndRecordGraphs.__init__   s    r#   r   r;   c                 D    | j                             |           |j        S r   )r   r-   r   )r   r   r;   s      r!   r   zEagerAndRecordGraphs.__call__   s     2zr#   Nr   r   r#   r!   r   r      sQ          58/ elAS      r#   r   c                 L    t          |           } t          j        dd|           S )Nz(?m)^ *#.*\n?r&   )strr(   r)   ro   s    r!   strip_commentr      s"    t99D6"B---r#   c                 f    d                     d |                     d          D                       S )Nrr   c                 6    g | ]}|                                 S r   )rstrip)rJ   lines     r!   
<listcomp>z)remove_trailing_space.<locals>.<listcomp>   s     AAAdkkmmAAAr#   )ri   splitr   s    r!   remove_trailing_spacer      s/    99AA

40@0@AAABBBr#   c                 :    t          t          |                     S r   )r   r   )gm_strs    r!   normalize_gmr      s     !v!6!6777r#   c                 2    t          j        dd|           }|S )z-
    Normalize code: remove empty lines.
    z[\r\n]+rr   r'   )ro   normal_codes     r!   empty_line_normalizerr      s     &T400Kr#   c                    t           j        s||}t                      }d t          |          D             }d t          |          D             } || }	 || }
t	                        t          |          |          } || } || } || } || }t	                       |                     t          ||	                     |                     t          ||	                     |                     t          ||
                     |                     t          ||
                     |                     |j	        |           ||                     |j
        |           d S d S )Nc                 8    g | ]}t          j        d d           S 
   r2   randnrJ   r   s     r!   r   z!standard_test.<locals>.<listcomp>   $    777QU[R  777r#   c                 8    g | ]}t          j        d d           S r   r   r   s     r!   r   z!standard_test.<locals>.<listcomp>   r   r#   )r   assume_static_by_defaultr   ranger   r   
assertTruer   assertEqualr   r   )r   fnnargsexpected_opsexpected_ops_dynamicexpected_frame_countactualargs1args2correct1correct2opt_fnval1aval2aval1bval2bs                   r!   standard_testr      sx    * ,/C/O+F77%,,777E77%,,777Er5zHr5zH	GGG$_V$$R((FFENEFENEFENEFENE	GGGOOD))***OOD))***OOD))***OOD))***V')=>>>,77777  r#   r   c                     | j         S r   )r   )r   r;   s     r!   dummy_fx_compiler     s
    :r#   T皙?c                 4    |sdS ||k    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     sG     w   %%%%%+++v++++r#   cpusizestridedtypedevice
extra_sizec                 z   t          d t          | |          D                       dz   |z   }|j        rZ|j        dk    r7	 t	          j        |t          j        |                              |          }n0t	          j        |||          }nt	          j        |g||          }t	          j	        || |          S )Nc              3   ,   K   | ]\  }}|d z
  |z  V  dS )r
   Nr   )rJ   shaper   s      r!   rK   zrand_strided.<locals>.<genexpr>%  s/      HH]UFUQY& HHHHHHr#   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     	HHc$6G6GHHHHH
	
	 
  M>Q [EM&QQQTT U  FF [E&IIIFF;-uVLLLFD&111r#   c                 J     t          j                    fd            }|S )Nc            	          t          j                    5 }D ]/\  }}}|                    t          j        |||                     0 | i |cd d d            S # 1 swxY w Y   d S r   )
contextlib	ExitStackenter_contextr   object)argskwargsstackmoduleattrvalr   patchess         r!   _fnz"_make_fn_with_patches.<locals>._fn:  s    !## 	'u%, E E!c##ELs$C$CDDDD2t&v&&		' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   :AA #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 ]}|                    d          rt          | |          }t          |          s t          ||t          | |                     V| | }	t          |g|R  }
|	|
_        |$t          ||          rt          j        |
          }
t          ||	 ||
                     t          ||          st          ||t          | |                     |S )Ntest_)rP   r`   	__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  s9    Z777KKN"0"9NC > >??7## 	>d##BB<< gc4.@.@AAA+	++H*28888F&FO%'"j*A*A%!1&99NHii.?.?@@@@.. 	>ND'#t*<*<===r#   c                 N    t           j        dk    r| S t          j        |           S )N)r      sysversion_infor#  r{   r   s    r!   skipIfNotPy311r2  _  %    
7""	=r#   c                 N    t           j        dk    r| S t          j        |           S N)r      r.  r1  s    r!   skipIfNotPy312r7  e  r3  r#   c                 N    t           j        dk    rt          j        |           S | S r5  )r/  r0  r#  r$  r1  s    r!   xfailIfPy312r9  k  s&    
7""'+++Ir#   c                 N    t           j        dk    rt          j        |           S | S r5  r.  r1  s    r!   skipIfPy312r;  q  s%    
7""}R   Ir#   c                 R    t           j        dk    r| S t          j        |            d S )N)r   r   r.  r1  s    r!   requiresPy310r=  w  s+    
7""	br#   c                     d| _         | S NT)_expected_failure_dynamicr1  s    r!   expectedFailureDynamicrA    s    #'B Ir#   c                     d| _         | S r?  )!_expected_failure_codegen_dynamicr1  s    r!   expectedFailureCodegenDynamicrD        +/B(Ir#   c                     d| _         | S r?  )!_expected_failure_dynamic_wrapperr1  s    r!   expectedFailureDynamicWrapperrH    rE  r#   Fc                 &   t          j        d           t          j        d           t          rt          j                            d           | r@dd lmc m} |                    dt          |
                                                     d S d S )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_staterT    s    	d
K	 
	t 5---------
s2==??33444445 5r#   )r&   )NNr
   )Tr   )F)Ur  ru   r  loggingos.pathrg   rK  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	getLoggerr`   logr"   r   r+   rE   rH   rV   rn   CodeTyperz   rN   r   r   r   r   r   r   r   r   r   r   r   r   float32r   r   r  r  r+  r2  r7  r9  r;  r=  rA  rD  rH  rT  r   r#   r!   <module>rh     s-        



        				 



   2 2 2 2 2 2 2 2 2 2 2 2              2 2 2 2 2 2 8 8 8 8 8 8 8 8 8 8 8 8            A @ @ @ @ @ @ @ @ @       "&HU % % %   	BBB $	g!!> > >.C . . . .% % %P	E 	E 	EE E E,3    
 
5> 
 
 
 
 
 12T T T*-TkT T T T<       "@ @ @ @ @ @ @ @(       .3 . . . .
C3 C C C C8C 8 8 8 8      8 8 8 8B    , , , , ',2 2
3-2SM2 ;2 #u|#$	2
 2 2 2 28	 	 	 6:[[    4                
5 5 5 5 5 5s   B BB