
    /jx                       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ZddlZddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZ ddlZddlmZ ddlmc m 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/m0Z0 d
dl1m2Z2 d
dl3m4Z4m5Z5 d
dl6m7Z7m8Z8 d
dl9m:Z: d
dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d
dlmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ ddlKmLZLmMZMmNZN ddlOmPZPmQZQ ddlRmSZSmTZT ddlUmVZVmWZWmXZX erddlYmZZZ ddl[m\Z\  G d d          Z] G d deN          Z^ G d deN          Z_ G d  d!eN          Z` G d" d#eN          Za G d$ d%eN          Zb G d& d'eb          Zc G d( d)eN          Zd G d* d+eN          Ze G d, d-eN          Zfd.ed/ed0ef         fd1Zg G d2 d3eN          Zheji         G d4 d5                      Zj G d6 d7eX          Zk G d8 d9eX          Zl G d: d;eN          Zm G d< d=eN          Zn G d> d?eN          Zo G d@ dAeN          Zp G dB dCeN          Zq G dD dEeN          Zr ejs        dF          d/etej        eju        f         fdG            Zv ejs        dF          d/eteju        ej        f         fdH            Zw G dI dJeN          Zx G dK dLeN          Zy G dM dNeN          Zz G dO dPeN          Z{ G dQ dReN          Z| G dS dTeN          Z} G dU dVeN          Z~ G dW dXeN          Z G dY dZeN          Z G d[ d\e          Z G d] d^e          Zej        eej        eej        eiZ G d_ d`eN          Z G da dbeN          Z G dc ddeN          ZdS )ea  
This module contains miscellaneous variable tracker implementations for various Python types
and features used in Dynamo's symbolic execution. These classes help track and propagate
information about different kinds of variables during graph capture.

Key classes include:
- SuperVariable: Handles super() calls and method resolution
- ExceptionVariable: Tracks exception objects
- RandomVariable: Manages random number generators
- GetAttrVariable: Tracks attribute access
- MethodWrapperVariable: Handles method wrappers
- PythonModuleVariable: Tracks Python modules
- NumpyVariable: Handles numpy functions and types
- StringFormatVariable: Manages string formatting
- DebuggingVariable: Handles print and logging
    N)CallableSequence)Random)BuiltinFunctionType)AnyLiteralNoReturnTYPE_CHECKING	TypeGuardUnion)MutationType)TupleVariable)Source   )configgraph_break_hintstrace_rules	variables)create_call_functioncreate_call_function_excreate_instruction)$do_not_convert_to_tracable_parameter)raise_observed_exceptionunimplemented)GuardBuilderinstall_guard)unpatched_nn_module_init)
AttrSourceGenericAttrSourceGetItemSourceTypeMROSource
TypeSourceWeakRefCallSource)	check_unspec_or_constant_argscmp_name_to_op_mappingidentityis_tensor_base_attr_getteristypelist_methodsproxy_args_kwargsraise_args_mismatchtuple_methods   )#AsPythonConstantNotImplementedErrorraise_type_error_excVariableTracker)CONSTANT_VARIABLE_NONEConstantVariable)NestedUserFunctionVariableUserFunctionVariable)call_random_fnis_standard_setattrUserDefinedObjectVariable)	PyCodegen)InstructionTranslatorc                       e Zd ZdS )NO_SUCH_SUBOBJN)__name__
__module____qualname__     a/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/_dynamo/variables/misc.pyr;   r;   V   s        Dr@   r;   c            
            e Zd Zh ej        Z	 ddededz  deddf fdZd fd	Zd
ddede	ee
dz  f         f fdZd
ddedefdZd
ddedee         deeef         def
dZ xZS )SuperVariableNtypevarobjvarkwargsreturnc                 V     t                      j        di | || _        || _        d S Nr?   )super__init__rD   rE   )selfrD   rE   rF   	__class__s       rA   rK   zSuperVariable.__init___   s8     	""6""" 
 r@   codegenr8   c                                         fd            | j                   | j        5 | j                                       t	          dd                     d S                     t	          dd                     d S )Nc                  H     t          j        t                              S N)r   BuiltinVariablerJ   )rM   rN   s   rA   <lambda>z+SuperVariable.reconstruct.<locals>.<lambda>q   s    ggi.G.N.N&O&O r@   r   Fr-   )add_push_nullrD   rE   extend_outputr   rL   rN   rM   s    `rA   reconstructzSuperVariable.reconstructp   s    OOOOOPPP;"GDK   !!"6q%"@"@AAAAA!!"6q%"@"@AAAAAr@   txr9   namec                    | j         s(t          ddd| d| j         d| j          ddg           | j         J | j                                        }| j                                         }| j         j        rt          | j         j                  nd }t          |t                    r| j         j	        }| j         j        }d }|j
        }	 |                    |          d	z   }n0# t          $ r# t          t          ||          |          d fcY S w xY wt          |t!          |                    D ]f}	||	         j                            |t&                    x}
r<|
t&          ur3|r+t)          t+          t-          |          |	          |          }|
|fc S gt          d
dd| d| j         d| j          dddg           d S )Nz1-arg super not implemented z"Dynamo failed to trace attribute `z$` accessed via `super()` (for type `z` and object `z4`) because one-argument of super() is not supported.z-Use two-argument super(type, object_or_type).gb_typecontextexplanationhintsr-   zUnable to resolve super getattrz8`) because the resolved attribute type is not supported.z0Ensure the attribute exists in the parent class.z(Check the arguments passed to `super()`.)rE   r   rD   as_python_constantpython_typesourcer"   
issubclasstypevalue__mro__index
ValueErrorgetattrrJ   rangelen__dict__getr;   r   r    r!   )rL   rX   rY   search_typetype_to_usetype_to_use_sourcerc   
search_mrostart_indexrh   resolved_getattrrM   s              rA   _resolved_getattr_and_sourcez*SuperVariable._resolved_getattr_and_sourcey   sr    { 
	5D D D,0LD DHLD D D D	 	 	 	 {&&&l5577 k--//.2k.@JJt{)***d 	 k4(( 	4++K!%!3 (
	H$**;77!;KK 	H 	H 	H 5k::DAA4GGGG	H ;J88 
	4 
	4E#-e#4#=#A#A$#W#WW 4#>99) !+)-8J*K*KUSS " " ,V33335DT D D(,D DDHKD D D C:
	
 
	
 
	
 
	
 
	
 
	
s   
C# #*DDc                 0   |                      ||          \  }}t          j                            |          st	          | |          S |r,t          |                    t          j                             t          j        	                    ||          S )Nrc   )
ru   r   r2   
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)rL   rX   rY   rf   rc   s        rA   var_getattrzSuperVariable.var_getattr   s     99"dCCv)44U;; 	/"4... 	J&++L,GHHIII)00v0FFFr@   argsc                    |                      ||          \  }}| j        J |t          j        u rt	          t
                    S |t          j        j        j        u r| j        }ddl	m
} t          |t          j                  r}t          |j        |          rh|sf|sdt                      5  t!          j        |t$          |          }	|	                    || j        g|z   |          cd d d            S # 1 swxY w Y   nt)          dd|  d| d| d| d| dg t*          j        	           nm| j        j        rt1          |d
          r|j        dk    rt          j                            |          rp|j        }
t1          |
d          r |
j        dk    rt          j        |
          }n!|J |j        }t          j        |
|          }|                     |d||          S t          |tB                    rSt          |j"        tF          j$                  r4t!          j        ||j"        |d          }	|	                    |||          S t          |tJ                    rt          |j"        tF          j$                  rt          | j        t          j                  r| j        }nGd }| j        j        rtM          | j        j                  }t!          j        || j        j'        |          }|J t!          j        ||j"        tQ          |d          d          }	|	                    ||g||          S t          |tF          j$                  r8t!          j        |||d          }	|	                    || j        g|z   |          S t          |tF          j)                  r6t          j*        |j"        | j        |                              |||          S tW          |          r0t          | j        t                    r | j        j,        |g|R i |S |t          j-        u r|d         }	 |.                                }n2# t^          $ r%}t)          dd|  d| ddg|           Y d }~nd }~ww xY w|j0        j	        1                    | j                  s/t)          dd|  d| d| j         ddgt*          j2        	           t          |tf                    sJ |j0        j	        4                    | j        |t          j5                               t          j6        S t          | j        t          j7                  r0|| j        j8        v r"| j        j9                             ||||          S t          | j        t          j:                  r0|| j        j;        v r"| j        j<                             ||||          S t          | j        t          j=                  r+|t|          v r"| j        j?                             ||||          S t          | j        t          j@                  r+|t          v r"| j        jB                             ||||          S |t          jC        u r|d         jD        }|j0        j	        E                    | j        |          rX|j0        j	        F                    | j        |d          }t          |t          j5                  rt          t          |           |S d }	 t          C                    | j        jD        |          }n%# t          $ r t          t          |           Y nw xY wd }| j        j        t          | j        j        |          }t!          j        |||          S |t          jJ        jK        u r|d         }i }|d         jL        }|d         jL        L                                D ]#\  }}|jM        .                                }|||<   $|jN        jO        }d|jN        _O        	 |                    |||          ||jN        _O        S # ||jN        _O        w xY wt          |tF          jP                  rM|t          jR                    v r8t!          j        |||d          }|                    || j        g|z   |          S t)          dd|  d| d| d | d!d"g	           d S )#Nr   )AttributeMutationNewrw   z#Unsupported super().__init__() callcall_method  z0Dynamo encountered a super().__init__() call on zK that resolved to a `torch.nn.Module.__init__()` call that we cannot trace.r\   r<   __new__r=   builtinsTrc   realize__func__r   z7Non-constant attribute given to `super().__delattr__()`zbDynamo requires the attribute name passed to `super().__delattr__(...)` to be a constant (string).zEEnsure the attribute name is a string literal or a constant variable.)r]   r^   r_   r`   from_exczFAttempted super().__delattr__() on an object without mutation trackingzmDynamo needs to track mutations on an object before `super().__delattr__` can be used on it. But the object (z3) doesn't have attribute mutation tracking enabled.z<Ensure the object is tracked by Dynamo's side effect system.)
deleted_ok   F)r   zFAttempted to call a super() attribute that is not a function or methodz4Dynamo does not know how to trace the call `super().z()` because `super().z(` is not a function or method attribute.zMEnsure the attribute accessed via `super()` is a standard method or function.)Sru   rE   objectrK   LambdaVariabler&   torchnnModuleside_effectsr   
isinstancer   r7   mutation_typer   r0   buildr   call_functionr   r   	DIFFICULTrc   hasattrr<   UserDefinedClassVariableis_supported_new_method__self__r=   rR   membercall_methodstaticmethodr   typesFunctionTypeclassmethodr"   
value_typer   
MethodTypeUserMethodVariabler6   method_setattr_standard__delattr__ra   NotImplementedErroroutputis_attribute_mutation
DYNAMO_BUGstr
store_attrDeletedVariabler1   UserDefinedDictVariable_dict_methods_dict_vtUserDefinedSetVariable_set_methods_set_vtUserDefinedTupleVariabler,   	_tuple_vtUserDefinedListVariabler)   _list_vt__getattribute__rf   has_pending_mutation_of_attr	load_attrr   AttributeErrorr   _C_disabled_torch_function_implitemsvtsymbolic_torch_function_statetorch_function_subclass_enabledMethodDescriptorTyper   get_tensor_method)rL   rX   rY   r~   rF   inner_fnrc   rE   r   fn_vtuser_clsuser_cls_vtuser_cls_sourcecls_variable
cls_sourceattrexc	attr_nameresult
attr_valueattr_sourcefunc	tf_kwargstf_argshash_key_vtvalue_vtkey_strtx_oldfn_vars                                rA   r   zSuperVariable.call_method   sq
     <<RFF&{&&& v&&!(+++111[F;;;;;; 69#FGGv35IJJ  "(
 :;; Q Q+14V  E !..rDK=43GPP	Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q AH4HH$HHHHHH!1 !1 !1 !1 9-78     Ko	J*--o	J !Y..2JJ8TT /  (Hx.. 83F*3T3T/8/H/R/R)))"(-'@_   **2y$GGG,// _	JJu15
 5
 _	J $)H%fd  E &&r4888+.. X	J:u14
 4
 X	J $+y'IJJ   ${ "
;% @!+DK,>!?!?J.4K*   
 %%%#)!!&*55	  E &&rL+@4+@&III%"455 y	J#)"hvtTTTE&&rDK=4+?HHH%"233 v	J/!4;v  mBf--. !** r	JzK20
 0
 r	J 74;6rKDKKKFKKK+++7D..00& 
 
 
U8488$88!L ` !	 	 	 	 	 	 	 	 	
 9)??LL d8488$88!(#{!( !( !(
 W*5    dC(((((I"--T9#<#>#>   33t{I$EFFL	JDK555;'33BdFKKKt{I$DEEG	JDK444;&222tT6JJJt{I$FGGB	JM));(44RtVLLLt{I$EFF=	JL((;'33BdFKKK000 QIy%BBY   /99Kt :   fi&?@@ A,^R@@@J= $44T[5F	RR

! = = =(<<<<<= K{!-/0BINN"(ZEEE???
 7DI1gmG)-a)<)<)>)> . .%X%.;;==%-	'""5UFOTB,L))"gyAA  0PP 0P     x!;<<	JK9;;;; %*2xNNNF''T[MD,@&III'0400$00,, ,37, , , `
	
 
	
 
	
 
	
 
	
 
	
sH   +<C44C8;C83Q 
Q7Q22Q75%\ \=<\=`' '`5rQ   rN   r8   rG   N)r<   r=   r>   r0   _nonvar_fieldsr   rK   rW   r   tupler   ru   r}   listdictr   __classcell__rM   s   @rA   rC   rC   Z   s       		'N *.    $& 	
 
     "B B B B B BB
)B
14B
	sJ%%	&B
 B
 B
 B
 B
 B
HG5 GS G_ G G G G e
#e
 e
 ?#	e

 S/)*e
 
e
 e
 e
 e
 e
 e
 e
 e
r@   rC   c                   Z     e Zd Zdej        deddf fdZdefdZddd	e	de
f fd
Z xZS )FrameSummaryVariableframe_summaryrF   rG   Nc                 H     t                      j        di | || _        d S rI   )rJ   rK   r   )rL   r   rF   rM   s      rA   rK   zFrameSummaryVariable.__init__  s.    ""6"""*r@   c                     t           j        S rQ   )	tracebackFrameSummaryrL   s    rA   rb   z FrameSummaryVariable.python_type  s    %%r@   rX   r9   rY   c                    |dk    r)t           j                            | j        j                  S |dk    r)t           j                            | j        j                  S |dk    r)t           j                            | j        j                  S |dk    r)t           j                            | j        j                  S t                      	                    ||          S )NlinenofilenamerY   line)
r   r2   r|   r   r   r   rY   r   rJ   r}   rL   rX   rY   rM   s      rA   r}   z FrameSummaryVariable.var_getattr  s    8-44T5G5NOOOZ-44T5G5PQQQV^^-44T5G5LMMMV^^-44T5G5LMMMww""2t,,,r@   )r<   r=   r>   r   r   r   rK   re   rb   r   r0   r}   r   r   s   @rA   r   r     s        +i&< + +PT + + + + + +&T & & & &	-5 	-S 	-_ 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-r@   r   c            
       d    e Zd Zdeded ef         deddf fdZede	j
        ded ef         dd fd            Zededefd	            Zdee	j
        ez           fd
ZdedefdZdeej                 fdZdddededefdZdddedef fdZdddedee         deeef         def
 fdZ xZS )TracebackVariabler   tb_nextrF   rG   Nc                 ^     t                      j        di | || _        |J || _        d S rI   )rJ   rK   r   r   )rL   r   r   rF   rM   s       rA   rK   zTracebackVariable.__init__  sA     	""6"""*"""r@   c                 6     | t          |          |          S )N)r   )r   )clsr   r   s      rA   from_frame_summaryz$TracebackVariable.from_frame_summary  s"     s'66HHHHr@   objc                 ~    t          | t                    p(t          | t                    o|                                 S rQ   )r(   r   r2   is_constant_noner   s    rA   is_valid_tracebackz$TracebackVariable.is_valid_traceback  s9    c,-- 
3())Dc.B.B.D.D	
r@   c                     t          | j        t                    r| j        gS | j        g| j                                        z   S rQ   )r(   r   r2   r   
extract_tbr   s    rA   r   zTracebackVariable.extract_tb  sB    $, 011 	(&''"#dl&=&=&?&???r@   tbc                 x    | }t          |t                    r"||u rdS |j        }t          |t                    "dS )NTF)r(   r   r   )rL   r   curr_tbs      rA   has_reference_cyclez%TracebackVariable.has_reference_cycle  sK    8<W/00 	&"}}toG W/00 	& ur@   c                     t           j        S rQ   )r   TracebackTyper   s    rA   rb   zTracebackVariable.python_type  s    ""r@   rX   r9   name_varvalc                    |                                 }|dk    r|                     |          st          t          |           t	          |t
          t          f          sJ |                     |          s*t          |t
                    r*|                    |           rt          t          |           || _
        t          j        S )Nr   )ra   r   r   	TypeErrorr   r   r2   r   r(   ri   r   r   r1   )rL   rX   r   r   rY   s        rA   call_setattrzTracebackVariable.call_setattr  s     **,,9**3// 8(B777c$57G#HIIIII'',, 9s-..9363J3J43P3P9 )R888DL//r@   rY   c                    |dk    r| j         S |dk    r| j                            |d          S |dk    r| j        S |dk    r"t          d|  ddg t          j        	           t                                          ||          S )
Nr   	tb_linenor   r   tb_lastiz traceback.tb_lasti not supportedz accessing 'tb_lasti'zNDynamo does not support accessing the tb_lasti attribute of traceback objects.r\   )r   r   r}   r   r   SUPPORTABLErJ   r   s      rA   r}   zTracebackVariable.var_getattr  s    9<[  %11"h???_$$%%Z:666l6)56	    ww""2t,,,r@   r~   c                     |dk    r't           j                            | |d         u           S |dk    r | j        |g|R  S t	                                          ||||          S )N__eq__r   __setattr__)r   r2   r|   r  rJ   r   )rL   rX   rY   r~   rF   rM   s        rA   r   zTracebackVariable.call_method  ss     8-44TT!W_EEE]""$4$R/$////ww""2tT6:::r@   )r<   r=   r>   r   r   r2   r   rK   r   r   r   r   r   r0   boolr   r   r   r   re   r   r   rb   r  r   r}   r   r   r   r   s   @rA   r   r     s-       + *,<<= 	
 
     $ I -I *,<<=I 
	I I I [I 
 
D 
 
 
 \

@D!7:N!NO @ @ @ @
o $    #T%"56 # # # #0#0 "0 	0
 
0 0 0 0$-5 -S -_ - - - - - - ;#; ; ?#	;
 S/)*; 
; ; ; ; ; ; ; ; ; ;r@   r   c                       e Zd Z	 	 	 ddedeedf         deeef         dz  dedz  de	dz  ddf fd	Z
d
eddfdZddZdefdZdddededefdZdddedee         deeef         def
 fdZdddedef fdZdefdZeZ xZS )ExceptionVariableNexc_typer~   .init_kwargsrc   r   rG   c                 4   t                                          ||           || _        || _        |r$t	          d|  d| dg t
          j                   t          | _        t          | _	        t          d          | _        t          | _        d | _        d S )N)rc   r   z,Keyword args passed to exception constructorz with kwargs zRDynamo does not know how to handle keyword args passed to an exception constructorr\   F)rJ   rK   r  r~   r   r   r  r1   __context__	__cause__r2   __suppress_context____traceback__python_stack)rL   r  r~   r  rc   r   rM   s         rA   rK   zExceptionVariable.__init__.  s     	mDDD 	 	F;;k;;p6)56	    -C +A5Ee5L5L!.D <@r@   r^   c                     || _         d S rQ   )r  )rL   r^   s     rA   set_contextzExceptionVariable.set_contextO  s    "r@   rN   r8   c                 "                          fd                                j                                       t	           j                  d           dt
          dd f fd} |d            |d            |d           d S )	Nc                  D                          dj        j                  S )Nr   )load_import_fromr  r<   rN   rL   s   rA   rS   z/ExceptionVariable.reconstruct.<locals>.<lambda>T  s    G,,Z9OPP r@   FrY   rG   c                 4   t          |           }t          |t                    r|j        dv s
J |            d S                                   |                                                   d                                         |            d S )N)TFNr   )rj   r(   r2   rf   dup_toprU   rot_nr   )rY   r   rN   rL   s     rA   codegen_attrz3ExceptionVariable.reconstruct.<locals>.codegen_attrY  s    4&&Dd,-- )z%8888$88888!!!%%gmmA&6&6777""4(((((r@   r  r  r  )rT   foreachr~   r   rl   r   )rL   rN   r  s   `` rA   rW   zExceptionVariable.reconstructR  s    PPPPP	
 	
 	
 		"""c$)nne444	)s 	)t 	) 	) 	) 	) 	) 	) 	) 	]###[!!!+,,,,,r@   c                     | j         S rQ   )r  r   s    rA   rb   zExceptionVariable.python_typeg  s
    }r@   rX   r9   r   r   c                 >   dt           dt          ffd}|                                }|dk    r5t          |t          t
          f          sJ |                     |           n.|dk    r}|                                s<t          |t          j	        t          j        t          j
        t          j        f          r!|| _        t          j        d          | _        n |d           n|dk    r*|                    dd	          r|| _        n |d           n{|d
k    rLt                              |          s*t#          t$          t          j        d          g           || _        n)t+          dd|  d| d| dg t,          j                   t          j        S )NmsgrG   c                 R    t          t          t          |           g           d S )Nr~   )r   r  r2   )r#  rX   s    rA   raise_errorz3ExceptionVariable.call_setattr.<locals>.raise_errorp  s*    $Y:J3:O:O9PQQQQQQr@   r  r  Tz9exception cause must be None or derive from BaseExceptionr  Fr  z0__traceback__ must be a traceback object or Noner%  z4Unsupported attribute assignment on Exception objectzcall_setattr r   z/Dynamo does not support setting the attribute 'z{' on tracked exception objects. Only `__context__`, `__cause__`, `__suppress_context__`, and `__traceback__` are supported.r\   )r   r	   ra   r   r  r2   r  r   r   rR   !UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariabler  r  is_constant_matchr   r   r   r  r|   r  r   r   r  r1   )rL   rX   r   r   r&  rY   s    `    rA   r  zExceptionVariable.call_setattrj  s   	RS 	RX 	R 	R 	R 	R 	R 	R **,,=  c$57G#HIIIIIS!!!![  ##%% Y-/?@	* * Y "%,5,Ft,L,L))WXXXX+++$$T511 Y,/))WXXXX_$$$77<< 	((/N     "%DN555t55ZZ Z Z 7)56    //r@   rY   rF   c                     |dk    r | j         |g|R  S |dk    r*|\  }|                      |t          d          |           | S t                                          ||||          S )Nr
  with_tracebackr  )r  r2   rJ   r   )rL   rX   rY   r~   rF   r   rM   s         rA   r   zExceptionVariable.call_method  s     =  $4$R/$////%%%DRb"2?"C"CRHHHK77&&r4v>>>r@   c                    |dk    r| j         S |dk    r| j        S |dk    r| j        S |dk    r| j        S |dk    r-t	          j        t          | j                  | j                  S t                      
                    ||          S )Nr  r  r  r  r~   rw   )r  r  r  r  r   ListVariabler   r~   rc   rJ   r}   r   s      rA   r}   zExceptionVariable.var_getattr  s    =  ##[  >!+++,,_$$%%V^^)$ty//$+NNNNww""2t,,,r@   c                 0    | j         j         d| j         dS )N())rM   r<   r  r   s    rA   __str__zExceptionVariable.__str__  s     .)<<DM<<<<r@   )NNNr   )r<   r=   r>   r   r   r0   r   r   r   r   rK   r  rW   re   rb   r  r   r   r}   r1  __repr__r   r   s   @rA   r  r  ,  s        :> $-1@ @@ OS()@ #./$6	@
 @ $d*@ 
@ @ @ @ @ @B#? #t # # # #- - - -*T    60#60 "60 	60
 
60 60 60 60p?#? ? ?#	?
 S/)*? 
? ? ? ? ? ? -5 -S -_ - - - - - -= = = = = HHHHHr@   r  c                       e Zd ZdZdS )UnknownVariablez
    It could be anything!
    Nr<   r=   r>   __doc__r?   r@   rA   r4  r4    s           r@   r4  c                   l     e Zd ZdZddedz  deddf fdZddd	ee         de	eef         defd
Z
 xZS )DelayGraphBreakVariablez^
    Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
    Nr#  rF   rG   c                 H     t                      j        di | || _        d S rI   )rJ   rK   r#  )rL   r#  rF   rM   s      rA   rK   z DelayGraphBreakVariable.__init__  s+    ""6"""r@   rX   r9   r~   c                 |    | j         dn| j         j        }t          dd| j          d| d| j         g            d S )Nr[   z#Unsupported function call (delayed)zsource: z@Dynamo determined that a graph break should occur when calling `z`. Reason: r\   )rc   rY   r   r#  )rL   rX   r~   rF   rY   s        rA   r   z%DelayGraphBreakVariable.call_function  sn     [(rrdk.>9,t{,,9!9 9.2h9 9	
 	
 	
 	
 	
 	
r@   rQ   )r<   r=   r>   r6  r   r   rK   r   r0   r   r   r   r   s   @rA   r8  r8    s          C$J        
#
 '
 S/)*	

 

 
 
 
 
 
 
 
r@   r8  c                   b    e Zd ZdZddZddd	edefd
Zdddee         de	eef         defdZ
dS )ComptimeVariableza
    This variable is special, it lets you execute arbitrary code at
    Dynamo compile time
    rN   r8   rG   Nc                      t          d          )Nzcomptime is special form)r   rL   rN   s     rA   rW   zComptimeVariable.reconstruct  s    !"<===r@   rX   r9   rY   c                     ddl m } | j        J t          j        |t	          ||          t          | j        |                    S )Nr   )comptimerw   )r@  rc   r0   r   rj   r   )rL   rX   rY   r@  s       rA   r}   zComptimeVariable.var_getattr  sY    ''''''{&&&$$''
4;0M0M
 
 
 	
r@   r~   rF   c           
         ddl m} |st          |          dk    r2t          |ddt          |           dt          |           d           |d         }t	          |t
                    r' |                                 ||                     nt	          |t                    r|                                }|j	        rt          |d|j                    t          j        ||j        |j                                        |j        rt%          |j        j                  nd d	          } | ||                     nt)          d
t+          |                     t,          j        S )Nr   )ComptimeContextz
comptime()zat most 2 args and 0 kwargsz
 args and  kwargsr   zOcomptime function must not have free variables, but these variables were free: r?   z"unsupported argument to comptime: )r@  rB  rl   r+   r   r4   get_functionr3   get_codeclosurer/   co_freevarsr   r   	f_globalsfn_namera   defaultsr   r   RuntimeErrorre   r   r1   )rL   rX   r~   rF   rB  fncoder   s           rA   r   zComptimeVariable.call_function  s    	/.....  	SYY]]-t99<<F<<<	   !Wb.// 	PBOOoob112222677 	P;;==Dz $xfjfvxx   %
--//,.KAbk'(((T  D D$$%%%%NDHHNNOOO//r@   r   )r<   r=   r>   r6  rW   r   r0   r}   r   r   r   r?   r@   rA   r<  r<    s         
> > > >
5 
S 
_ 
 
 
 
-0#-0 '-0 S/)*	-0
 
-0 -0 -0 -0 -0 -0r@   r<  c                   \     e Zd ZU edz  ed<   dZedz  ed<   	 ddedz  deddf fdZ xZ	S )CellVariableNpre_existing_contents
local_namerF   rG   c                 H     t                      j        di | || _        d S rI   )rJ   rK   rP  )rL   rP  rF   rM   s      rA   rK   zCellVariable.__init__3  s0     	""6"""%:"""r@   rQ   )
r<   r=   r>   r0   __annotations__rQ  r   r   rK   r   r   s   @rA   rO  rO  &  s          +T1111 "Jd
!!! ?C; ;%4t%;;NQ;	; ; ; ; ; ; ; ; ; ;r@   rO  c                   (     e Zd Zdeddf fdZ xZS )NewGlobalVariablerF   rG   Nc                 :     t                      j        di | d S rI   rJ   rK   rL   rF   rM   s     rA   rK   zNewGlobalVariable.__init__;  &    ""6"""""r@   )r<   r=   r>   r   rK   r   r   s   @rA   rU  rU  :  sK        # # # # # # # # # # # #r@   rU  fn_clsrG   .c                 V     dt           dt           dt           f fd}t          |_        |S )Nr~   rF   rG   c                       j         | i |S rQ   )apply)r~   rF   rZ  s     rA   trampoline_autograd_applyzDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_apply@  s    v|T,V,,,r@   )r   !produce_trampoline_autograd_apply_origin)rZ  r^  s   ` rA   r_  r_  ?  sH    - - - - - - - - - )J%$$r@   c            
           e Zd ZdZdhej        Zdededdf fdZddd	ee         de	e
ef         defd
Zddd	ee         de	e
ef         defdZddd	ee         de	e
ef         dd fdZddde
d	ee         de	e
ef         def
dZ xZS )AutogradFunctionVariablez-represents a torch.autograd.Function subclassrZ  rF   rG   Nc                 H     t                      j        di | || _        d S rI   )rJ   rK   rZ  )rL   rZ  rF   rM   s      rA   rK   z!AutogradFunctionVariable.__init__P  s+    ""6"""r@   rX   r9   r~   c           	      n   ddt           dd ffd}t          j        |||f           rt          j                    r| j        }ddlm} ddlm} | j	        j
        } || j	        j                  }	|	r" || j	        j
        | j	        j                  }d }| j	        j        }
|
t          j        j        j        ur*t          dd	|  d
| d
| dddgt           j                   | j	        j        }|t          j        j        j        ur)t          dd	|  d
| d
| ddgt           j                   ddlm} |9|	s7t+                              | j	        j                  | j	        j                  }|ot+          |d          } ||| j	        j        ||                              ||          }| j        r|	rt+          | j        d          }t7          |                    t:          j                             t+          | j        d          }t7          |                    t:          j                             |S | j        rt+          | j        d          }nd }| j	        j
        }t>                               ||          }|g|}tC          |tD          j#                  rutI          j%        |          }tM          |          dz
  tM          |j'                  k    r
|dd          }t          j(        ||d          }|                    ||          S tC          |tD          j)                  rHtU          j+        |j,        tU          j-        | j	                  |                              ||          S t          dd	|  d
| d
| dt]          |          j         ddg           d S )NFr   rG   c                     |                                  r| j        durdt          | t          j                  r|                               rdd S d S d S )NFT)	is_tensorrequires_gradr   r   NNModuleVariableis_training)r   rg  rX   s    rA   visitz2AutogradFunctionVariable.call_apply.<locals>.visit\  sl    ||~~ )#500$(M"i899 )>>"%% )$(MMM) )) )r@   r   )#autograd_function_forward_rewritten)_is_setup_context_definedzUnsupported custom vjpzcall_apply r   zgDynamo does not support tracing `torch.autograd.Function` subclasses that define a custom `vjp` method.z+Remove the custom `vjp` method if possible.z.Use standard `backward` instead if applicable.r\   zUnsupported custom jvpzgDynamo does not support tracing `torch.autograd.Function` subclasses that define a custom `jvp` method.z+Remove the custom `jvp` method if possible.r-   )AutogradFunctionApplyVariabler]  )r   rw   forwardsetup_contextTr   z=Non-function or method in subclass of torch.autograd.FunctionzDynamo requires the `forward` attribute of a `torch.autograd.Function` subclass to be a standard Python function or method. Found type `z
` instead.zPEnsure the `forward` method is defined as a regular function or instance method.)/r0   rj  r   is_grad_enabledrc   "torch._functorch.autograd_functionrk  torch.autograd.functionrl  rZ  rn  ro  vjpautogradFunctionr   r   r  jvphigher_order_opsrm  r   import_sourcer=   r<   backwardr   r   rz   r   CLOSURE_MATCHAutogradFunctionContextVariabler|   r   r   r   inspect	signaturerl   
parametersr   r   r   r   r   r   re   )rL   rX   r~   rF   rj  rc   rk  rl  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnrm  apply_sourcer   fwd_srcsetup_ctx_srcrL  ctxsigr   rg  s    `                   @rA   
call_applyz#AutogradFunctionVariable.call_applyT  s    	)o 	)$ 	) 	) 	) 	) 	) 	) 	) 	edF^444 F	U244 F	[F      JIIIII,J#<#<T[=V#W#W # 	 A@K')B 
 [_FU^48884@$@@@@@@!- FH +6    [_FU^48884@$@@@@@@!- F*6
 
 
 
 HGGGGG~&:~#$$T[%;<<dk>R  "Hj&H&H&HL//$#	  
 mBf--  { T3 T$T[)<<g001KLLMMM *4; H Hm66|7QRRSSSJ; 	Y77FFF[ -44RvFF|d|b%,-- 	#B''C4yy1}CN 3 333ABBx#)"bNNNE&&r4888E,-- 	/24;??   mBf--	. W<d<<T<<F<<Q37883DQ Q Q3
 
 
 
 
 
r@   c                 P   | j         j        }t          |d         j                  t          j        j        j        u sJ t          |t          j
                  sJ | j        J t          | j        d          }t          j        |||d          }|                    |||          S )Nr   ry  Tr   )rZ  ry  re   rf   r   _dynamoexternal_utilsFakeBackwardCFunctionr   r   r   rc   r   r0   r   r   )rL   rX   r~   rF   rL  	fn_sourcer   s          rA   call_backwardz&AutogradFunctionVariable.call_backward  s     [!DGM""em&B&XXXXX"e011111{&&&t{J77	%b"YMMM""2tV444r@   c                 *    t          | j                  S rQ   )rb  rZ  rL   rX   r~   rF   s       rA   r   z&AutogradFunctionVariable.call_function  s     (444r@   rY   c           
         ddl m} |dk    rqt          j        | j                  rAt          | j                  } || |j        j        d|gt          ||          R            S | 	                    |||          S |dk    r| 
                    |||          S | j        t          | j        |          nd }	 t          j        | j        |          }n# t          $ r d }Y nw xY wt!          |t"                    r|                    | j                  }	t          j        |	          }
|
J |,|
                    |	|                              |||          S  |
|	                              |||          S t!          |t,                    r1t/          j        |j        | |                              |||          S t5          dd	|  d
| d| ddg           d S )Nr-   )wrap_fx_proxyr]  r   )rX   proxyry  rw   z$Unsupported autograd.Function methodr   r   ,Dynamo does not support calling the method `z` directly on the `torch.autograd.Function` instance. Supported methods include `apply`, `backward`, static methods, and class methods.znEnsure the method is decorated with `@staticmethod` or `@classmethod` if it's meant to be called on the class.r\   )builderr  r   is_callable_allowedrZ  r_  r   create_proxyr*   r  r  rc   r   r|  getattr_staticr   r   r   __get__lookupcreate_with_sourcer   r   r   r   r   r   )rL   rX   rY   r~   rF   r  r^  rc   r   r   traceds              rA   r   z$AutogradFunctionVariable.call_method  sr    	+*****7??.t{;; 9,MK- -) %}0")0'1 +488      r4888Z%%b$7776:k6MZT222SWF,T[$??!    #|,, {{4;//$+D11)))% 11$v1FFTTf  "6$<<55b$GGGC--  3L$v  -D&112 B8488$88!9!9 !9 !9
U     s   :C C$#C$)r<   r=   r>   r6  r0   r   r   rK   r   r   r   r  r  r   r   r   r   r   s   @rA   rb  rb  H  s       77 			'N
s c d      {#{ ?#{ S/)*	{
 
{ { { {z5#5 ?#5 S/)*	5
 
5 5 5 55#5 '5 S/)*	5
 
$5 5 5 5@#@ @ ?#	@
 S/)*@ 
@ @ @ @ @ @ @ @r@   rb  c                   H    e Zd ZU  ej        e          Zee         ed<   dS )SavedTensorBox)default_factorytensorsN)	r<   r=   r>   dataclassesfieldr   r  r0   rS  r?   r@   rA   r  r  +  s7         %6[%6t%L%L%LGT/"LLLLLr@   r  c                   F    e Zd ZdZdddhej        Z	 	 	 	 	 ddededz  dededz  d	e	ed
f         dz  dedz  deddf fdZ
e	 	 ddddee         dz  deeef         dz  defd            ZdefdZdddedee         deeef         def
 fdZdddedef fdZ xZS )r{  zZ
    Tracks an autograd.Function() context using mutation tracking in side_effects.py
    r  	inferencesaved_tensorsNFrf   r   needs_input_grad.non_differentiablerF   rG   c                 x     t                      j        d||d| || _        || _        || _        || _        d S N)rf   r   r?   )rJ   rK   r  r  r  r  )	rL   rf   r   r  r  r  r  rF   rM   s	           rA   rK   z(AutogradFunctionContextVariable.__init__<  sN     	FuFFvFFF"* 0"4r@   rX   r9   r~   c           
          d }|r|st          d |D                       }| j        j                            d t          j        j        j        t          j	        t          dt                      |          i           }|S )Nc              3   L   K   | ]}|                                 o|j        V   d S rQ   )rf  rg  .0xs     rA   	<genexpr>z9AutogradFunctionContextVariable.create.<locals>.<genexpr>U  s1      $U$U1Q[[]]%Fq$U$U$U$U$U$Ur@   T)r  r  r  )r   r   r   track_object_newr   rt  functionFunctionCtx	functoolspartialr{  r  )rX   r~   rF   r  outs        rA   r|   z&AutogradFunctionContextVariable.createL  s       	V 	V$$U$UPT$U$U$UUUi$55N#//,..!1	   

 

 
r@   c                 b    | j         "t          dd|  dg t          j                   | j         S )Nzproxy not setz	as_proxy zMDynamo requires the autograd.Function context to be initialized with a proxy.r\   )r  r   r   r   r   s    rA   as_proxyz(AutogradFunctionContextVariable.as_proxyc  sJ    :'*D**25)45    zr@   rY   c                    |dk    r$t                                          ||||          S |dk    rK|r"t          ||dt          |           d           t	          |i           d         | _        t          j        S |dk    r)t          dd|  d	| d
| dg t          j
                   | j        t          dd|  d	| ddg           | j        J | j        s9|s| j        st          |d           |j        j                            | |           t          | j        j                  dk    rg | j        _        |D ]!}| j        j                            |           "t          j        S )Nr
  mark_non_differentiablez0 kwargsrC  r   save_for_backwardz,Unsupported autograd.Function context methodr   r   r  z` on `autograd.Function` context objects. Supported methods are `__setattr__`, `save_for_backward` and `mark_non_differentiable`.r\   z9Unsupported autograd.Function context `save_for_backward`zjDynamo requires the `saved_tensors` attribute to be initialized on the `autograd.Function` context object.zEnsure that the `saved_tensors` attribute is properly initialized before calling `save_for_backward`. `save_for_backward` only supported on a newly constructed `torch.autograd.function.FunctionCtx`.z>save_for_backward() requires a source and no keyword arguments)rJ   r   r+   rl   r*   r  r   r1   r   r   r  r  r  rc   r/   r   r   track_save_for_backwardr  append)rL   rX   rY   r~   rF   argrM   s         rA   r   z+AutogradFunctionContextVariable.call_methodp  s    =  77&&r4v>>>... S#BjS[[:Q:Q:QRRR&7b&A&A!&DD#33&&&F4t44d44-- - - 7)56    %S4t44d44Ow
 
 
 
 !---~ 	G T[ $X   I"::4FFF t!)**Q..)+D& 	3 	3C&--c2222//r@   c                     dv rt           fd          S dk    r2 j        +t          j        t	           j        j                            S dk    rg j        $t          j                             j                  S  j	        r5t           j	        d          }t          j         j        j        |          S t                                                    S )N)r  r  c                  N                         t          |           |          S rQ   )r   r   )r~   rF   rY   rL   rX   s     rA   rS   z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s!    (8(8T4::v(V(V r@   r  r  )r   r  r   r   r   r  r  r2   r|   rc   r   r0   r   rf   rJ   r}   rL   rX   rY   rc   rM   s   ``` rA   r}   z+AutogradFunctionContextVariable.var_getattr  s    CCC!VVVVVV   ?""t'9'E*40B0J+K+KLLL%%%$0 1889NOOO{ V#DK1CDD&,R1LfUUUww""2t,,,r@   )NFNNNNN)r<   r=   r>   r6  r7   r   r   re   r  r   rK   r   r   r0   r   r   r|   r  r   r   r}   r   r   s   @rA   r{  r{  0  s        
 	 
#	1	N #'$(48)-5 55 4K5 	5
 Tz5  c	*T15  $J5 5 
5 5 5 5 5 5   2648 #'$. S/)*T1 
	   \,#    30#30 30 ?#	30
 S/)*30 
30 30 30 30 30 30j-5 -S -_ - - - - - - - - - -r@   r{  c            
            e Zd ZdZ	 ddej        j        deej        j                 dz  deddf fdZ	dd	d
e
dee         dee
ef         def
dZ xZS )AutogradEngineVariablez;
    Represents a torch._C._ImperativeEngine instance.
    Nrf   r   rF   rG   c                 @     t                      j        d||d| d S r  rW  )rL   rf   r   rF   rM   s       rA   rK   zAutogradEngineVariable.__init__  s/     	FuFFvFFFFFr@   rX   r9   rY   r~   c                    |dk    rt           j        j        j        r}|j        s|j        s
J d            t          j        |t           j        j        j	        j
                  }|                    ||j        j                                        g|R |          S t          dd|  d| dg            d S t          dd|  d| d	| d
g            d S )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truez7Unsupported torch._C._ImperativeEngine.queue_callback()r   r   zYqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=True.r\   z-Unsupported torch._C._ImperativeEngine methodzgDynamo only supports the `queue_callback` method on a torch._C._ImperativeEngine instance, but found: `z`.)r   r  compiled_autogradin_compiled_autograd_region	one_grapherror_on_graph_breakr0   r   r  FakeCompiledAutogradEnginer  r   r   r   get_ca_final_callbacks_varr   )rL   rX   rY   r~   rF   r   s         rA   r   z"AutogradEngineVariable.call_method  sF    ###}.J | r'>  n > (-M0KZ  **Y+FFHHP4PP   U8488$88!H      G4t44d44RIMR R R     r@   rQ   )r<   r=   r>   r6  r   r   _ImperativeEnginere   r   rK   r   r   r0   r   r   r   r   s   @rA   r  r    s          ?CG Gx)G 34t;G 	G
 
G G G G G G%#% % ?#	%
 S/)*% 
% % % % % % % %r@   r  c                   p     e Zd Zdedef         deddf fdZddd	ee         dee	ef         defd
Z
 xZS )r   rL  .rF   rG   Nc                 H     t                      j        di | || _        d S rI   )rJ   rK   rL  )rL   rL  rF   rM   s      rA   rK   zLambdaVariable.__init__  s+    ""6"""r@   rX   r9   r~   c                      | j         |i |S rQ   )rL  r  s       rA   r   zLambdaVariable.call_function  s     tw''''r@   )r<   r=   r>   r   r0   r   rK   r   r   r   r   r   r   s   @rA   r   r     s        8C$89 S T      (#( '( S/)*	(
 
( ( ( ( ( ( ( (r@   r   c                   \    e Zd Zddhej        Z	 ddedededz  deddf
 fdZdef fdZ	defd	Z
ed
ej        j        dedefd            ZdefdZdefdZdddedefdZddZdddee         deeef         defdZdddedee         deeef         def
 fdZdddefdZ xZS )ry   rY   py_typeNr   rF   rG   c                      t                      j        di | t          |t                    sJ t          |t                    sJ || _        || _        || _        d S rI   )rJ   rK   r   r0   r   r   rY   r  )rL   r   rY   r  rF   rM   s        rA   rK   zGetAttrVariable.__init__  sg     	""6"""#/////$$$$$$	r@   c                 `    | j         | j         S t                                                      S rQ   )r  rJ   rb   rL   rM   s    rA   rb   zGetAttrVariable.python_type  s)    <#<77&&(((r@   c                 @    | j         j         d| j         d| j         dS Nr/  z, r0  )rM   r<   r   rY   r   s    rA   r2  zGetAttrVariable.__repr__  s*    .)DDDHDD	DDDDr@   
base_proxyr   c                 "    t          | |          S rQ   )rj   )r  r   s     rA   create_getattr_proxyz$GetAttrVariable.create_getattr_proxy  s    z4(((r@   c                 p    t                               | j                                        | j                  S rQ   )ry   r  r   r  rY   r   s    rA   r  zGetAttrVariable.as_proxy  s(    33DH4E4E4G4GSSSr@   c                     | j                                         }	 t          || j                  S # t          $ r t          |  d          d w xY w)Nz is not a constant)r   ra   rj   rY   r   r   )rL   constants     rA   ra   z"GetAttrVariable.as_python_constant   se    8..00	M8TY/// 	M 	M 	M%&A&A&ABBL	Ms	   0 ArX   r9   c                 >   t          | j        t          j                  st          |j                            | j        j                  }| j        |j	        vrt          t          j        || j                  }||j	        vrt          t          j        ||          S rQ   )r   r   r   rh  r   r   get_submodule
module_keyrY   rm   r|  r  )rL   rX   rY   step1step2s        rA   const_getattrzGetAttrVariable.const_getattr'  s    $(I$>?? 	&%%	''(;<<9EN**%%&udi88u~%%%%%eT222r@   rN   r8   c                      || j                    |                    |                    | j                             d S rQ   )r   rU   create_load_attrsrY   r>  s     rA   rW   zGetAttrVariable.reconstruct2  s>    g77	BBCCCCCr@   r~   c                 `    | j                             || j        t          |          |          S rQ   )r   r   rY   r   r  s       rA   r   zGetAttrVariable.call_function6  s(     x##B	4::vFFFr@   c                    |dv r| j         dk    r|s|d                                         rt          | j        t          j        t          j        t          j        f          r|| j        }|d                                         }|	                    ||          r|
                    ||          S |dk    r't          |          dk    r|d         S t          j        S nj|dk    r| j         dk    rt          |          dk    r|d                                         r|st          | j        t          j        t          j        t          j        f          r_| j        }|d                                         }|	                    ||          rt	          j        d          S t	          j        d	          S |d
k    r| j         dk    r|st          | j        t          j                  r*| j                            ||d         |d         d          S t          | j        t          j                  r| j                            |           t!                                          ||||          S )N)__getitem__rn   rm   r   rn   r   r-   __contains__TF__setitem__)directly_update_dict)rY   is_python_constantr   r   r   r7   rh  r   ra   has_key_in_generic_dictr}   rl   r1   r2   r   convert_to_unspecializedrJ   r   )rL   rX   rY   r~   rF   r   keyrM   s          rA   r   zGetAttrVariable.call_method>  sj    ***	Z'' (Q**,, ( 7.6  ( (Cq',,..C**2s33 0r3/// u}}t99>>7N$;;	  N""	Z''D		QQ**,,   7.6   (Cq',,..C**2s33 9 1$777 1%888]""tyJ'>'>v'>$(I$GHH x77Qat 8    $(I$>?? 611"555ww""2tT6:::r@   c                    | j         dk    rCt          | j        t          j                  r$|j        j                            | j                  rJ d| j        _        t          j
        || j        j        j        | j                  S )Nrm   T)rY   r   r   r   r   r   r   has_pending_mutationban_mutationr0   r   rf   rm   rc   )rL   rX   s     rA   get_forwarded_dictz"GetAttrVariable.get_forwarded_dict  sv    I##48Y%GHH $I*??II $# J !%$R)@$+NNNr@   rQ   r   )r<   r=   r>   r0   r   r   re   r   rK   rb   r2  r   r   fxProxyr  r  ra   r  rW   r   r   r   r   r   r  r   r   s   @rA   ry   ry     s|        
	'N  $	   	
  
     )T ) ) ) ) ) )E# E E E E ) )s )s ) ) ) \)T# T T T TMC M M M M	3 7 	3s 	3s 	3 	3 	3 	3D D D DG#G 'G S/)*	G
 
G G G GB;#B; B; ?#	B;
 S/)*B; 
B; B; B; B; B; B;HO%< O O O O O O O O Or@   ry   c                        e Zd Zdej        deddf fdZdddee         de	e
ef         def fd	Zded
         fdZdej        fdZded
         fdZdefdZdedefdZ xZS )MethodWrapperVariablemethod_wrapperrF   rG   Nc                 H     t                      j        di | || _        d S rI   )rJ   rK   r  )rL   r  rF   rM   s      rA   rK   zMethodWrapperVariable.__init__  s.    ""6""",r@   rX   r9   r~   c           	         t          | j                  rt          |d         t          j                  rat          |          dk    rt          |          dk    st          |d           |d                             || j        j        j	                  S | j        j        }| j        j	        }|dk    rVt          |          j        }|t          j        u r2t          j        t                                        |||g||          S nt          j        dk    r|t          j        d         u r|dk    rddlm} t          |          dk    rt|sr	 |                    ||                     |d                                                             S # t,          $ r t/          t,          |           Y nt0          $ r Y nw xY wt3          d	d
|  d| d| dddgt4          j                   n|t          j        d         u r|dk    s|t          j        d         u r|dk    rddlm} t          |          dk    rT|sR	 |                    ||                     |d                                                             S # t0          $ r Y nw xY w|t          j        d         u rdnd}t3          d| dd
|  d| d| d| dd| dd| dgt4          j                   t9                                          |||          S )Nr   r-   z2tensor attribute getter takes exactly one argumentrK   )r      rS  r  )SourcelessBuilderz9unsupported type.__dict__['__annotations__'].__get__ callzcall_function , args: 
, kwargs: z{`torch.compile` only supports calling type.__dict__['__annotations__'].__get__ on a single constant argument (i.e. a type).zpMake sure your call to type.__dict__['__annotations__'] only has one positional argument (no keyword arguments).zMake sure the argument to type.__dict__['__annotations__'] is a constant (i.e. type). For example, `object`, `int`, `MyCustomClass`.r\   rg   rm   zunsupported type.__dict__['z'].__get__ callz5`torch.compile` only supports calling type.__dict__['z7'].__get__ on a single constant argument (i.e. a type).z&Make sure your call to type.__dict__['zC'].__get__ only has one positional argument (no keyword arguments).z)Make sure the argument to type.__dict__['zT'].__get__ is a constant (i.e. type). For example, `object`, `int`, `MyCustomClass`.)r'   r  r   r   TensorVariablerl   r/   r}   r   r<   re   rK   r   rR   r   sysversion_inform   r  r  r|   ra   r   r   r.   r   r   r  rJ   r   )
rL   rX   r~   rF   self_objwrapper_namefn_objr  r   rM   s
            rA   r   z#MethodWrapperVariable.call_function  s    &d&9:: 	RzGY-@
 @
 	R IINNs6{{a'7'7$L   7&&r4+>+G+PQQQ &/*3 :%%(^^,F(( 088DD %%   ) '' DM*;<<<	))2222224yyA~~f~,33D//Q0J0J0L0LMM   & A A A,^R@@@@@:   D SOOOtOOvOO?FR
 '2     $-	222|y7P7Pj111li6O6O2222224yyA~~f~,33D//Q0J0J0L0LMM   ;   D &y)AAA		z  PiPPPOOOtOOvOO?T] ? ? ?FY F F FR	 R R R
 '2    ww$$Rv666s,   A F F?3	F?>F?=A I> >
J
JTc                     dS NTr?   r   s    rA   r  z(MethodWrapperVariable.is_python_constant      tr@   c                     | j         S rQ   )r  r   s    rA   ra   z(MethodWrapperVariable.as_python_constant  s    ""r@   c                     dS r  r?   r   s    rA   is_python_hashablez(MethodWrapperVariable.is_python_hashable  r  r@   c                 D    t          |                                           S rQ   hashra   r   s    rA   get_python_hashz%MethodWrapperVariable.get_python_hash      D++--...r@   otherc                     t          |t                    o)|                                 |                                k    S rQ   r   r0   ra   rL   r  s     rA   is_python_equalz%MethodWrapperVariable.is_python_equal   :    uo.. H''))U-E-E-G-GG	
r@   )r<   r=   r>   r   MethodWrapperTyper   rK   r   r0   r   r   r   r   r  ra   r
  intr  r   r  r  r   r   s   @rA   r  r    sM       -u'> -# -RV - - - - - -a7#a7 'a7 S/)*	a7
 
a7 a7 a7 a7 a7 a7FGDM    #E$; # # # #GDM    / / / / /
V 
 
 
 
 
 
 
 
 
r@   r  c                   |     e Zd Zdej        deddf fdZdddedef fd	Z	de
d
         fdZdej        fdZ xZS )GetSetDescriptorVariabledescrF   rG   Nc                 H     t                      j        di | || _        d S rI   )rJ   rK   r  )rL   r  rF   rM   s      rA   rK   z!GetSetDescriptorVariable.__init__  s+    ""6"""			r@   rX   r9   rY   c                     |dk    r<| j         r5t          | j         d          }t          j        || j        j        |          S t                                          ||          S )Nr  )rc   r   r0   r   r  r  rJ   r}   r  s       rA   r}   z$GetSetDescriptorVariable.var_getattr  sZ    9Y77F"(TY->GGG77&&r4000r@   Tc                     dS r  r?   r   s    rA   r  z+GetSetDescriptorVariable.is_python_constant  r  r@   c                     | j         S rQ   )r  r   s    rA   ra   z+GetSetDescriptorVariable.as_python_constant  s
    yr@   )r<   r=   r>   r   GetSetDescriptorTyper   rK   r   r0   r}   r   r  ra   r   r   s   @rA   r  r    s        U7 3 4      15 1S 1_ 1 1 1 1 1 1GDM    E$>        r@   r  c                        e Zd Zddhej        Zdej        deddf fdZde	ej                 fdZ
dej        fdZdefd	Zd
ddedefdZd
ddedefdZ xZS )PythonModuleVariablerf   is_torchrF   rG   Nc                      t                      j        di | || _        | j        t          u p| j        j                            d          | _        d S )Nztorch.r?   )rJ   rK   rf   r   r<   
startswithr"  rL   rf   rF   rM   s      rA   rK   zPythonModuleVariable.__init__!  sQ    ""6"""

e+Wtz/B/M/Mh/W/Wr@   c                     t           j        S rQ   )r   
ModuleTyper   s    rA   rb   z PythonModuleVariable.python_type&  s    r@   c                     | j         S rQ   rf   r   s    rA   ra   z'PythonModuleVariable.as_python_constant)  
    zr@   c                     d| j          dS )NzPythonModuleVariable(r0  r)  r   s    rA   r2  zPythonModuleVariable.__repr__,  s    4tz4444r@   rX   r9   rY   c                 j    t          | j        |          }t          j                            |          S rQ   )r   rf   r   r2   r|   rL   rX   rY   r   s       rA   call_obj_hasattrz%PythonModuleVariable.call_obj_hasattr/  s,     T**)00888r@   c                    |j         j                            | |          r |j         j                            | |          S d }| j        s|| j        j        vr<	 t          | j        |          }n7# t          $ r t          t          |           Y nw xY w| j        j        |         }| j
        ot          | j
        |          }t          j        |||          S rQ   )r   r   r   r   r"  rf   rm   rj   r   r   rc   r   r0   r   )rL   rX   rY   r   rc   s        rA   r}   z PythonModuleVariable.var_getattr5  s    9!>>tTJJ 	@9)33D$???
= 	3D
(;;;=$TZ66

! = = =(<<<<<= ,T2J>DK!>!>$RV<<<s   A/ /BB)r<   r=   r>   r0   r   r   r'  r   rK   re   rb   ra   r   r2  r2   r.  r}   r   r   s   @rA   r!  r!    s*        
	'NXe. X# X$ X X X X X X
 T%"23        E$4    5# 5 5 5 59)9149	9 9 9 9=5 =S =_ = = = = = = = =r@   r!  c            
            e Zd Zdededdf fdZddded	ee         deeef         def
d
Z	dddedefdZ
defdZd fdZded         fdZdefdZdedefdZ xZS )TypingVariablerf   rF   rG   Nc                 H     t                      j        di | || _        d S rI   rJ   rK   rf   r%  s      rA   rK   zTypingVariable.__init__G  +    ""6"""


r@   rX   r9   rY   r~   c                    |dk    rGt          |          dk    r4| j        |d                                                  }t          |          S |dk    ret          |          dk    rR|sPt	          |d         t                    o| j        |d         j        k    }t
          j                            |          S t          dd| j         d| d| d	| d
| d| j         dd| d| j         dgt          j
                   d S )Nr  r-   r   r	  z,unsupported method call on `typing` variableztyping variable: z, method name: r  r  z.`torch.compile` does not support method call `z` on `typing` variable f.zAvoid calling the z method on r\   )rl   rf   ra   r1  r(   r   r2   r|   r   r   r  )rL   rX   rY   r~   rF   
new_typingr   s          rA   r   zTypingVariable.call_methodK  s/    =  SYY!^^DG$>$>$@$@AJ!*---X4yyA~~f~Q88XTZ4PQ7==X 188@@@Bi
ii4iiQUiiagiitttgkgqtttCTCCdjCCC".		
 	
 	
 	
 	
 	
r@   c                    ddl m}m} |t          v rt	          j        | |          S |j        j                            | |          r |j        j        	                    | |          S t          | j        |          }| j        r*t          | j        |          }  |||          |          S |                    ||          S )Nr-   )r  VariableBuilder)r  r  r9  r%   r   ry   r   r   r   r   rj   rf   rc   r   r|   )rL   rX   rY   r  r9  rf   r   s          rA   r}   zTypingVariable.var_getattrd  s    ????????))),T48889!>>tTJJ 	@9)33D$???
D)); 	7$T[$77K3??2{33E:::$++B666r@   c                     | j         S rQ   r)  r   s    rA   ra   z!TypingVariable.as_python_constantt  r*  r@   rN   r8   c                     t          | j        t          j                  s!t	                                          |          S |                    |                    | j                             d S rQ   )r   rf   r   GenericAliasrJ   rW   append_outputcreate_load_constrV   s     rA   rW   zTypingVariable.reconstructw  s^    $*e&899 	077&&w///0 	g77
CCDDDDDr@   Tc                     dS r  r?   r   s    rA   r
  z!TypingVariable.is_python_hashable  r  r@   c                 D    t          |                                           S rQ   r  r   s    rA   r  zTypingVariable.get_python_hash  r  r@   r  c                     t          |t                    o)|                                 |                                k    S rQ   r  r  s     rA   r  zTypingVariable.is_python_equal  r  r@   r   )r<   r=   r>   r   rK   r   r   r0   r   r   r}   ra   rW   r   r
  r  r  r   r  r  r   r   s   @rA   r1  r1  F  sj       c S T      
#
 
 ?#	

 S/)*
 

 
 
 
275 7S 7_ 7 7 7 7 C    E E E E E E8GDM    / / / / /
V 
 
 
 
 
 
 
 
 
r@   r1  )maxsizec                      ddl m}  i }|                                 D ]K\  }}|j                                        D ],\  }}t	          |          rt          ||d          x}r|||<   -L|S )zd
    This generates a mapping from numpy modules to their torch._numpy
    modules equivalents.
    r   )NP_TO_TNP_MODULEN)utilsrD  r   rm   callablerj   )rD  np_fn_to_tnp_fnnp_modtnp_modrI  tnp_fnnp_fns          rA   get_np_to_tnp_maprL    s     )(((((O+1133 4 4&/5577 	4 	4OGV 4 $FGT:::5 4-3OE*	4 r@   c                  Z    t                      } d |                                 D             S )z
    This is just the reverse mapping of get_np_to_tnp_map() - mapping from
    torch._numpy modules to numpy equivalents.
    c                     i | ]\  }}||	S r?   r?   r  kvs      rA   
<dictcomp>z%get_tnp_to_np_map.<locals>.<dictcomp>  s    '''TQAq'''r@   )rL  r   )ms    rA   get_tnp_to_np_maprT    s+     	A''QWWYY''''r@   c            
       P    e Zd ZdZej        fZdededdf fdZe	de
j        defd            Ze	de
j        defd	            Zd
ddee         deeef         defdZd
ddedee         deeef         def
dZdefdZdef fdZded         fdZdefdZdedefdZ xZS )NumpyVariablezz
    Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
    rf   rF   rG   Nc                 H     t                      j        di | || _        d S rI   r3  r%  s      rA   rK   zNumpyVariable.__init__  r4  r@   rL  c                     |j                             d          }t          |          dk    r|d d         ddgk    sJ || j        v S Nr6  r   r   _numpy)r=   splitrl   constant_fold_functionsr   rL  mods      rA   can_constant_fold_throughz'NumpyVariable.can_constant_fold_through  sQ    m!!#&&3xx1}}RaRWh,?!?!?!??S000r@   c                     |j                             d          }t          |          dk    r|d d         ddgk    sJ t                              |          S rY  )r=   r[  rl   np_constant_collections_maprn   r]  s      rA    get_constant_collection_for_funcz.NumpyVariable.get_constant_collection_for_func  sW    m!!#&&3xx1}}RaRWh,?!?!?!??*..r222r@   rX   r9   r~   c                    t           j        s+t          dd| j         d| d| d| j         ddg           d	d
lm} ddlm} t                      	                    | j                  }|:t          dd| j         d| d| d| d	d| j         dg t          j                   |J |                     |          x}	 	  | | j        d |D             i d |                                D                       S # t          $ r> t          dd| j         d| d| d| d	d| j         dg t          j                   Y d S w xY w|j        dk    rEt           j        r9t          dd| j         d| d| d| d	d| j         ddd| j         dg           |                    |j        ||          \  }}|                     |          rmt+          ||          r]t,          j                             |                                 d |D             i d |                                D                       S  |j        j        d  ||          gt9          ||          R  }|                    ||          S )!Nz?attempted to trace numpy function with config.trace_numpy=Falsenumpy function: r  r  z"Attempted to trace numpy function z; while `torch._dynamo.config.trace_numpy` was set to False.zHSet `torch._dynamo.config.trace_numpy` to True to trace numpy functions.r\   r   )numpy_to_tensor_wrapperr-   )NumpyNdarrayVariablez8attempted to trace numpy function unsupported by PyTorchz  (corresponding torch function: r0  z Can't find numpy numpy function z in torch._numpy.c                 6    g | ]}|                                 S r?   ra   r  s     rA   
<listcomp>z/NumpyVariable.call_function.<locals>.<listcomp>  $    ???Q!..00???r@   c                 >    i | ]\  }}||                                 S r?   rh  rO  s      rA   rR  z/NumpyVariable.call_function.<locals>.<dictcomp>  *    PPPA1a2244PPPr@   zTnumpy function that produces a const collection type encountered non-const argumentsznumpy function zs that produces a const collection type (e.g. np.dtype, np.iinfo/np.finfo) received arguments that are not constant.ztorch._numpy.randomzXattempted to trace torch._numpy.random function with config.use_numpy_random_stream=TruezAttempted to trace zD when `torch._dynamo.config.use_numpy_random_stream` is set to True.z<Set `torch._dynamo.config.use_numpy_random_stream` to False.zAvoid calling r6  c                 6    g | ]}|                                 S r?   rh  r  s     rA   ri  z/NumpyVariable.call_function.<locals>.<listcomp>$  rj  r@   c                 >    i | ]\  }}||                                 S r?   rh  rO  s      rA   rR  z/NumpyVariable.call_function.<locals>.<dictcomp>%  rl  r@   r   )r   trace_numpyr   rf   rE  re  tensorrf  rL  rn   r   r  rb  r   r.   
USER_ERRORr=   use_numpy_random_stream
patch_argsr<   r_  r$   r   r2   r|   ra   r   r  r*   )	rL   rX   r~   rF   re  rf  r   collection_variable_typr  s	            rA   r   zNumpyVariable.call_function  s    ! 		YW4:WWtWWvWWM M M M _    	433333000000 ""&&tz22<R~4:~~t~~v~~w{~~~\tz\\\&2	    '+'L'LT'R'RR#..DJ??$???PPPPP    7 
 
 
r Ctz  C  C4  C  CSY  C  C{  C  C  C!@$* !@ !@ !@*5	 	 	 	 	 	 	
 #8882 9 v Ctz  C  C4  C  CSY  C  C{  C  C  C!&dj !& !& !& W6666	 	 	 	 0::4=$PVWWLD&--d33 	-dF;;	 !188-D++--??$???PPPPP    +BI*''-- #400  E
 (..r5999s   ;C? ?AEErY   c           	      `    t          dd| j         d| d| dg t          j                   d S )Nz/attempted to trace numpy.* function as a methodrd  r  r  z6Tracing numpy.* functions as methods is not supported.r\   )r   rf   r   r   )rL   rX   rY   r~   rF   s        rA   r   zNumpyVariable.call_method1  sX     	EStzSS4SS6SSP",		
 	
 	
 	
 	
 	
r@   c                     | j         S rQ   r)  r   s    rA   ra   z NumpyVariable.as_python_constantA  r*  r@   c                     t           j        rLt          | j        t          j                  r| j        S t          | j        t                    r| j        j        S t                      	                                S rQ   )
r   ro  r   rf   enumEnumMetare   r<   rJ   r  r  s    rA   r  zNumpyVariable.as_proxyD  sc     		+$*dm44 "z!$*d++ + z**ww!!!r@   Tc                     dS r  r?   r   s    rA   r
  z NumpyVariable.is_python_hashableR  r  r@   c                 D    t          |                                           S rQ   r  r   s    rA   r  zNumpyVariable.get_python_hashU  r  r@   r  c                     t          |t                    o)|                                 |                                k    S rQ   r  r  s     rA   r  zNumpyVariable.is_python_equalX  r  r@   ) r<   r=   r>   r6  tnp
issubdtyper\  r   rK   r   r   r   r  r_  rb  r   r0   r   r   r   r   r   r   ra   r  r   r
  r  r  r   r  r   r   s   @rA   rV  rV    s          #~/c S T       15+= 1$ 1 1 1 [1
 3%2D 3 3 3 3 [3
Y:#Y: 'Y: S/)*	Y:
 
Y: Y: Y: Y:v
#
 
 ?#	

 S/)*
 

 
 
 
 $7    "# " " " " " "GDM    / / / / /
V 
 
 
 
 
 
 
 
 
r@   rV  c                   <     e Zd Zdeddf fdZdefdZd	dZ xZS )
NullVariablerF   rG   Nc                 :     t                      j        di | d S rI   rW  rX  s     rA   rK   zNullVariable.__init__a  rY  r@   c                     dS )Nr  r?   r   s    rA   r2  zNullVariable.__repr__d  s    ~r@   rN   r8   c                     t           j        dk     rt          dddg t          j                   |                    t          d                     d S )N)r      z0cannot reconstruct NullVariable in Python < 3.11r[   zdAttempted to generate PUSH_NULL instruction in Python < 3.11; where this instruction does not exist.r\   	PUSH_NULL)r   r  r   r   r   r=  r   r>  s     rA   rW   zNullVariable.reconstructg  sg    g%%J9&1    	0==>>>>>r@   r   )	r<   r=   r>   r   rK   r   r2  rW   r   r   s   @rA   r  r  `  sz        # # # # # # # ##    ? ? ? ? ? ? ? ?r@   r  c                       e Zd ZdZdS )r   z"Marker used to implement delattr()Nr5  r?   r@   rA   r   r   u  s        ,,,,r@   r   c            
            e Zd ZdZdhej        Zededee         de	eef         defd            Z
dedee         de	eef         deddf
 fd	Zdefd
ZddZ xZS )StringFormatVariablez[
    Represents a call to str.format(), we delay calling format until after the graph.
    format_stringsym_args
sym_kwargsrG   c           	      l   t          d t          j        ||                                          D                       rPt          j                             |j        d |D             i d |                                D                       S  | |t          |          t          |                    S )Nc              3   >   K   | ]}|                                 V  d S rQ   )r  r  s     rA   r  z.StringFormatVariable.create.<locals>.<genexpr>  sB       
 
   ""
 
 
 
 
 
r@   c                 6    g | ]}|                                 S r?   rh  )r  rQ  s     rA   ri  z/StringFormatVariable.create.<locals>.<listcomp>  s$    ???a**,,???r@   c                 >    i | ]\  }}||                                 S r?   rh  rO  s      rA   rR  z/StringFormatVariable.create.<locals>.<dictcomp>  s*    PPPTQq!..00PPPr@   )all	itertoolschainvaluesr   r2   r|   formatr   r   r   )r   r  r  r  s       rA   r|   zStringFormatVariable.create  s      
 
_Xz/@/@/B/BCC
 
 
 
 
 		 -44$$??h???PPZ=M=M=O=OPPP    s=$x..$z2B2BCCCr@   rF   Nc                      t                      j        di | t          |t                    sJ || _        || _        || _        d S rI   )rJ   rK   r   r   r  r  r  )rL   r  r  r  rF   rM   s        rA   rK   zStringFormatVariable.__init__  sR     	""6"""------* $r@   c                 P    | j         j         d| j        d| j        d| j        dS r  )rM   r<   r  r  r  r   s    rA   r2  zStringFormatVariable.__repr__  s7    .)kkD,>kkDMkkW[Wfkkkkr@   rN   r8   c                 d                          fdd            t          j        t           j                                       d  j                                        D             } t          j        |                                         t          dd                     d S )Nc                                                                 j                                       d          g          S )Nr  )rU   r>  r  create_load_attrr  s   rA   rS   z2StringFormatVariable.reconstruct.<locals>.<lambda>  sA    G))--d.@AA,,X66  r@   T)call_function_exc                 T    i | ]%\  }}t           j                            |          |&S r?   r   r2   r|   rO  s      rA   rR  z4StringFormatVariable.reconstruct.<locals>.<dictcomp>  s<     
 
 
8<1I&--a00!
 
 
r@   F)
rT   r   r   r   r  r  r   ConstDictVariablerU   r   )rL   rN   rF   s   `` rA   rW   z StringFormatVariable.reconstruct  s         " 	 	
 	
 	
 		'T](;(;<<===
 
@D@U@U@W@W
 
 
 		+F334445dEBBCCCCCr@   r   )r<   r=   r>   r6  r0   r   r   r   r   r   r|   r   rK   r2  rW   r   r   s   @rA   r  r  y  s/         &G(FGNDD ?+D o-.	D
 
D D D [D$%% ?+% o-.	%
 % 
% % % % % %l# l l l lD D D D D D D Dr@   r  c                   D     e Zd Zdededdf fdZdee         fdZ xZS )ObjectVariablerf   rF   rG   Nc                 H     t                      j        di | || _        d S rI   r3  r%  s      rA   rK   zObjectVariable.__init__  r4  r@   c                     t           S rQ   )r   r   s    rA   rb   zObjectVariable.python_type  s    r@   )	r<   r=   r>   r   r   rK   re   rb   r   r   s   @rA   r  r    sq        f        T&\        r@   r  c            	            e Zd ZdZdededdf fdZededeej	        ej
        z           fd            Zd	d
dee         deeef         ddfdZddZededee         deeef         defd            Z xZS )DebuggingVariablez
    Represents a call to a debugging function like print(), or something
    registered to config.reorderable_logging_functions.
    rf   rF   rG   Nc                 H     t                      j        di | || _        d S rI   r3  r%  s      rA   rK   zDebuggingVariable.__init__  r4  r@   r   c                     t          |           o=t          | t          j        t          j        f          o| t
          j        j        j        v S rQ   )	rF  r   r   r   r   r   r  r   reorderable_logging_functionsr   s    rA   is_reorderable_logging_functionz1DebuggingVariable.is_reorderable_logging_function  sF    
 SMM J3!3U5N OPPJu}+II	
r@   rX   r9   r~   c           	          |j         rd S |                     | j        ||          s+t          dd| j         d| d| dd| j         dg           |j                            | t          |          f           d S )	NzJattempted to reorder a debugging function that can't actually be reorderedzfn: r  r  zl`torch.compile` can only reorder functions where the arguments are Tensors, constants, or string formatters.z#Avoid calling the logging function z" with args that are not supported.r\   )exportcan_reorder_logsrf   r   debug_localsr  r   r  s       rA   r   zDebuggingVariable.call_function  s     9 	F$$TZv>> 		dKtzKK4KK6KK@ i$*hhh    	d4jj122222r@   rN   r8   c                 H    | j         J | j                             |          S rQ   )rc   rW   r>  s     rA   rW   zDebuggingVariable.reconstruct  s&    {&&&{&&w///r@   rL  c                     t           j        t           j        t          f}t	          j        ||g          }|D ]}t          ||          s dS dS )zm
        Run some additional checks for what sort of function calls can we
        actually reorder.
        FT)r   r  r2   r  pytreetree_leavesr   )rL  r~   rF   allowed_input_types	flat_argsr  s         rA   r  z"DebuggingVariable.can_reorder_logs  sf     $& 
 &f~66	 	 	Cc#677 uu tr@   r   )r<   r=   r>   r6  r   rK   r   r   r   r   r   r  r   r0   r   r   r   rW   r  r  r   r   s   @rA   r  r    sB        
c S T       

	5%(AA	B
 
 
 \
3#3 '3 S/)*	3
 
3 3 3 3.0 0 0 0 S  tCH~ RV    \    r@   r  c                   d     e Zd ZdZdededdf fdZddd	ee         dee	ef         defd
Z
 xZS )IgnoredFunctionVariablezL
    Represents a call to an arbitrary function that should be ignored.
    rf   rF   rG   Nc                 H     t                      j        di | || _        d S rI   r3  r%  s      rA   rK   z IgnoredFunctionVariable.__init__	  r4  r@   rX   r9   r~   c                     t           j        S rQ   )r   r1   r  s       rA   r   z%IgnoredFunctionVariable.call_function  s     //r@   r<   r=   r>   r6  r   rK   r   r0   r   r   r   r   r   s   @rA   r  r    s         c S T      0#0 '0 S/)*	0
 
0 0 0 0 0 0 0 0r@   r  c            
       r     e Zd ZdZdej        deddf fdZddd	ed
e	e
         deee
f         de
f
dZ xZS )LoggingLoggerVariablez:
    Represents a call to any logging.Logger methods.
    rf   rF   rG   Nc                 H     t                      j        di | || _        d S rI   r3  r%  s      rA   rK   zLoggingLoggerVariable.__init__  r4  r@   rX   r9   rY   r~   c                    |j         rt          j        S t          | j        |d           }t          |dd           }t
          j        j        j        }||v s||v rt          j        S t          dd| j         d| d| d| ddg	           d S )
Nr   z8logging.Logger method not supported for non-export caseszmethod: r6  r  r  z>logging.Logger methods are not supported for non-export cases.zJAdd the logging method to `torch._dynamo.config.ignore_logging_functions`.r\   )
r  r   r1   rj   rf   r   r  r   ignore_logging_functionsr   )rL   rX   rY   r~   rF   methodr  
ignore_sets           rA   r   z!LoggingLoggerVariable.call_method  s     9 	433T4006:t44 ])B
Z8z#9#933NRtzRRDRR$RR&RRX\		
 	
 	
 	
 	
 	
r@   )r<   r=   r>   r6  loggingLoggerr   rK   r   r   r0   r   r   r   r   s   @rA   r  r    s         gn        
#
 
 ?#	

 S/)*
 

 
 
 
 
 
 
 
r@   r  c            
           e Zd ZdZ	 ddlmZmZm	Z
 n%# e$ r  eddi           Z eddi           ZY nw xY wdededd	f fd
Zedefd            ZdefdZdddedee         deeef         def
dZdddedefdZ xZS )ConstantLikeVariablez8self.value is a compile-time constant, but not a literalr   )dtypefloatinggenericinvalid_typer?   rf   rF   rG   Nc                 H     t                      j        di | || _        d S rI   r3  r%  s      rA   rK   zConstantLikeVariable.__init__L  r4  r@   c                 p    t          | j                  }|j        dk    r|j        S |j         d|j         S )z4Dynamically compute the prefix from the value's typer   r6  )re   rf   r=   r>   )rL   ts     rA   _error_prefixz"ConstantLikeVariable._error_prefixP  sB      <:%%>!,11111r@   c                     | j         S rQ   r)  r   s    rA   ra   z'ConstantLikeVariable.as_python_constant[  r*  r@   rX   r9   rY   r~   c                 n   g i }}	 d |D             }d |                                 D             }nA# t          $ r4 t          d| j         d| d| d| dd| j         d| d	d
g           Y nw xY w t	          | j        |          |i |}t          j                            |          rt          j        	                    |          S t          |t          j                  rt          |          S t          d| j         d| d| d| d| 	d| j         d| d| dg t          j                   d S )Nc                 6    g | ]}|                                 S r?   rh  r  s     rA   ri  z4ConstantLikeVariable.call_method.<locals>.<listcomp>i  s$    :::Q))++:::r@   c                 >    i | ]\  }}||                                 S r?   rh  rO  s      rA   rR  z4ConstantLikeVariable.call_method.<locals>.<dictcomp>j  s*    LLLTQq!..00LLLr@   z0constant-like method call with non-constant argsr6  z(*z, **r0  zAttempted to call z with non-constant args.zFEnsure that the args to the method call are constant (int, str, etc.).r\   z6constant-like method call with unsupported return typez) returned z, got unsupported return value )r   r   r   r  rj   rf   r   r2   rx   r|   r   reMatchr  r   r  )rL   rX   rY   r~   rF   cargsckwargsr   s           rA   r   z ConstantLikeVariable.call_method^  s    Rw	::T:::ELLV\\^^LLLGG" 	 	 	J-KKKKKK&KKKd1Cdddddd\	     	 +T**E=W==%0088 	=-44V<<<fbh'' 	0'///L)YYDYYDYYfYYQWYYpT-?pp$ppgmppp".		
 	
 	
 	
 	
 	
s   *1 ;A/.A/c                    t          | j        |          }t          || j                  rt	          |          }t          || j                  rt          |          S t          |t                    r$t          || j	                  rt          |          S t          j                            |          rt          j                            |          S t          | |          S rQ   )rj   rf   r   np_floatingfloatnp_dtypeNumpyDTypeVariablere   rd   
np_genericrV  r   r2   rx   r|   ry   r-  s       rA   r}   z ConstantLikeVariable.var_getattr  s    T**fd.// 	#6]]Ffdm,, 	.%f---fd## 	)
64?(K(K 	) (((%0088 	=-44V<<<tT***r@   )r<   r=   r>   r6  numpyr  r  r  r  r  r  ImportErrorre   r   rK   propertyr   r  ra   r   r0   r   r   r}   r   r   s   @rA   r  r  =  s       BB
0	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	

  0 0 0d>2r224B//	0c S T       2s 2 2 2 X2C    %
#%
 %
 ?#	%

 S/)*%
 
%
 %
 %
 %
N+5 +S +_ + + + + + + + +s   
 66r  c                   ,     e Zd ZdZdeddf fdZ xZS )TorchVersionVariableztorch.__version__rF   rG   Nc                     |                     dt          j                   |d         t          j        u sJ  t                      j        di | d S )Nrf   r?   )
setdefaultr   __version__rJ   rK   rX  s     rA   rK   zTorchVersionVariable.__init__  sW    '5#4555g%"33333""6"""""r@   )r<   r=   r>   r  r   rK   r   r   s   @rA   r  r    sP        'M# # # # # # # # # # # #r@   r  c                       e Zd ZdefdZdS )r  rG   c                 $    | j         j        j        S )a0  Similar to how numpy dtype descriptors (e.g. np.float32 ) are handled by NumpyVariable:

        np.dtype() objects are serialized as strings, torch._numpy wrappers will normalize to the torch dtype.
        This also handles unsupported things nicely (i.e. structured arrays and object arrays).
        )rf   re   r<   r   s    rA   r  zNumpyDTypeVariable.as_proxy  s     z''r@   N)r<   r=   r>   r   r  r?   r@   rA   r  r    s/        (# ( ( ( ( ( (r@   r  c                   `     e Zd ZdZdeddf fdZdddee         dee	ef         dd	fd
Z
 xZS )RandomClassVariablezrandom.RandomrF   rG   Nc                 :     t                      j        di | d S rI   rW  rX  s     rA   rK   zRandomClassVariable.__init__  rY  r@   rX   r9   r~   RandomVariablec                    t          |          dk    s|r%t          dd| d| dg t          j                   t          |          dk    rt          j        n|d         }t          |t          j                                                  S )	Nr-   z'random.Random() with improper argumentszargs: r  z=random.Random() with > 1 arg or with kwargs is not supported.r\   r   )seedr   )	rl   r   r   rq  r   r1   r  baseValueMutationNew)rL   rX   r~   rF   r  s        rA   r   z!RandomClassVariable.call_function  s     t99q==F=A99999[&1	    47t99>>y//tAwY^%D%D%F%F
 
 
 	
r@   r  r   s   @rA   r  r    s        # # # # # # # #
#
 '
 S/)*	

 

 
 
 
 
 
 
 
r@   r  c            
           e Zd ZdZdhej        Zh dZ	 	 ddej        dz  dedz  de	ddf fd	Z
deej                 fd
Zdej        fdZededefd            Zedeeeedf         edz  f         ddfd            Zedeeeedf         edz  f         defd            Zededeeeedf         edz  f         fd            Zdddedee         deeef         def
 fdZddZ xZS )r  zrandom.Random()

    Implemented by wrapping a VariableTracker around a random.Random object.
    The supported methods for the random.Random object cannot be overridden.
    Assumes that random objects behave the same given a set seed or state.
    random>   r  randintuniform	randrangeNrandr  rF   rG   c                 Z    t                      j        di | |]|                     |          sJ t          j                    | _        | j                            |                                           d S ||                                nd }t          j        |          | _        d S rI   )rJ   rK   is_supported_random_objr  r   setstategetstatera   )rL   r  r  rF   rM   s       rA   rK   zRandomVariable.__init__  s     	""6"""//55555 -//DKK  11111040@4**,,,dD ---DKKKr@   c                     t           j        S rQ   )r  r   r   s    rA   rb   zRandomVariable.python_type  s
    }r@   c                     | j         S rQ   )r  r   s    rA   ra   z!RandomVariable.as_python_constant  s
    {r@   r   c                    t          |           t          j        urdS t          j        t
          j        d          D ]}t          | |          s dS t          | |          }t          j
        |          r5|t          t          j        |                              |           k    r dS nt          |dd           t          t          j        |          ur dS dS )NF)r  r  r  r   T)re   r  r   r  r  r  _supported_fn_namesr   rj   r|  	isbuiltinr  )r   rY   meths      rA   r  z&RandomVariable.is_supported_random_obj  s    99FM))5O.0P
 
 	! 	!D 3%% uu3%%D && !76=$77??DDDD 55 E 4T22'&-QU:V:VVV 55 Wtr@   state.c                 @   t          |           t          u sJ t          | d                   t          u sJ t          | d                   t          u sJ t          d | d         D                       sJ | d         t          | d                   t          u sJ d S d S )Nr   r-   c              3   B   K   | ]}t          |          t          u V  d S rQ   )re   r  r  s     rA   r  z-RandomVariable.check_state.<locals>.<genexpr>		  s,      44a477c>444444r@   r   )re   r   r  r  r  r  s    rA   check_statezRandomVariable.check_state	  s    E{{e####E!H~~$$$$E!H~~&&&&445844444444Qx4a>>U#:#:#::#:#:r@   c                 4   t                               |            t          j        t          j                            | d                   t          j        d | d         D                       t          j                            | d                   g          S )Nr   c                 L    g | ]!}t           j                            |          "S r?   r  r  s     rA   ri  z-RandomVariable.wrap_state.<locals>.<listcomp>	  s)    LLLaY/66q99LLLr@   r-   r   )r  r  r   r   r2   r|   r  s    rA   
wrap_statezRandomVariable.wrap_state	  s    ""5)))&*11%(;;'LL58LLL  *11%(;;
 
 	
r@   c                 b    |                                  }t                              |           |S rQ   )ra   r  r  )r  	state_objs     rA   unwrap_statezRandomVariable.unwrap_state	  s/     ,,..	""9---r@   rX   r9   rY   r~   c                    dk    rc|j         j                            |             | j        j        d |D             i d |                                D              t          j        S dk    r,|                     | j        	                                          S dk    r^|j         j                            |            | j        
                    |                     |d                              t          j        S | j        v r|j         j                            |            | j        	                                dt          dt          d	t          ffd
} t          | j                  d |D             i d |                                D              t          ||||          S t!                                          |||          S )Nr  c                 6    g | ]}|                                 S r?   rh  r  s     rA   ri  z.RandomVariable.call_method.<locals>.<listcomp>+	  $    777Q!&&((777r@   c                 >    i | ]\  }}||                                 S r?   rh  )r  r  r   s      rA   rR  z.RandomVariable.call_method.<locals>.<dictcomp>,	  s*    PPPXS#3..00PPPr@   r  r  r   r~   rF   rG   c                      t          j                    }|                                t          |          | i |S rQ   )r  r   r  rj   )r~   rF   rrY   r  s      rA   call_random_methz4RandomVariable.call_method.<locals>.call_random_meth9	  s?    MOO

5!!!'wq$''8888r@   c                 6    g | ]}|                                 S r?   rh  r  s     rA   ri  z.RandomVariable.call_method.<locals>.<listcomp>A	  r  r@   c                 >    i | ]\  }}||                                 S r?   rh  rO  s      rA   rR  z.RandomVariable.call_method.<locals>.<dictcomp>B	  s*    HHHA1a**,,HHHr@   )r   r   mutationr  r  r   r   r1   r  r  r  r  r  r   rj   r5   rJ   r   )rL   rX   rY   r~   rF   r  r  rM   s     `   @rA   r   zRandomVariable.call_method!	  s    6>>I"++D111DK77$777PPPPP   33Z??4;#7#7#9#9:::ZI"++D111K  !2!247!;!;<<<33T---I"++D111K((**E9 9s 9s 9 9 9 9 9 9 9 'GDK&&77$777HHHHH  
 ""&6fEEEww""2tT6:::r@   rN   r8   c                 t                        fd                               dd                                                                d            |                     | j                                                                                 dd                                            d S )Nc                                                                 t                                         d          g          S )Nr   )rU   create_load_python_moduler  r  rN   s   rA   rS   z,RandomVariable.reconstruct.<locals>.<lambda>J	  s>    G))55f==,,X66  r@   r   Fr  r-   T)rT   r   r  r   r  r  r  pop_topr>  s    `rA   rW   zRandomVariable.reconstructH	  s       	
 	
 	
 	a''' 	*%%% 4 4 6 677888a&&&r@   r  r   )r<   r=   r>   r6  r0   r   r  r  r   r   rK   re   rb   ra   r   r  r  r   r  r  r  r   r  r  r   r   r   r   rW   r   r   s   @rA   r  r    sb         			'N
   &*'+. .md". $. 	.
 
. . . . . .T&-0    FM     V     \$ ;5eCHout|!CD ; ; ; ; \; 

%U38_edl BC 

 

 

 

 \

 	sE#s(OUT\1	2   \%;#%; %; ?#	%;
 S/)*%; 
%; %; %; %; %; %;N       r@   r  c                        e Zd Zedddej        e         dedz  dedd f
d            Zd	e	d
e	deddf fdZ
dddee	         deee	f         de	fdZddZdefdZdefdZdedefdZ xZS )WeakRefVariablerX   r9   weakref_valuerc   NoptionsrG   c                     |J |j         }|ot          |d          }t          j        | ||          } |            }|ot	          |          }t          j        | ||          }||d<   t          ||fi |S )N__callback__rc   )r  r   r0   r   r#   r  )	rX   r  rc   r  callbackcallback_sourcecallback_vtreferentreferent_vts	            rA   r   zWeakRefVariable.build\	  s     !!! - GZ%G%G%+B/JJ =??5-f55%+B&AA"{KCC7CCCr@   r  r  c                 V     t                      j        di | || _        || _        d S rI   )rJ   rK   r  r  )rL   r  r  r  rM   s       rA   rK   zWeakRefVariable.__init__n	  s8     	##7###&&r@   r~   rF   c                     | j         S rQ   )r  r  s       rA   r   zWeakRefVariable.call_functionu	  s     r@   rN   r8   c                                          fd            | j                    | j                                       t	          dd                     d S )Nc                  0                          dd          S )Nweakrefref)r  r  s   rA   rS   z-WeakRefVariable.reconstruct.<locals>.<lambda>~	  s    g&>&>y%&P&P r@   r   F)rT   r  r  rU   r   r>  s    `rA   rW   zWeakRefVariable.reconstruct}	  sl    PPPPQQQ !!! !!!21e<<=====r@   c                 4    | j                                         S rQ   )r  r
  r   s    rA   r
  z"WeakRefVariable.is_python_hashable	  s    22444r@   c                 4    | j                                         S rQ   )r  r  r   s    rA   r  zWeakRefVariable.get_python_hash	  s    //111r@   r  c                 n    t          |t                    sdS | j                            |j                  S )NF)r   r  r  r  r  s     rA   r  zWeakRefVariable.is_python_equal	  s3    %11 	5//0ABBBr@   r   )r<   r=   r>   r   r#  ReferenceTyper   r   r   r0   rK   r   r   r   r   rW   r  r
  r  r  r   r  r   r   s   @rA   r  r  [	  s}       D#D,S1D D 	D
 
D D D \D '*'9H'UX'	' ' ' ' ' ' #  '  S/)*	 
 
       > > > >5D 5 5 5 52 2 2 2 2CV C C C C C C C C Cr@   r  )r6  r  rx  r  r|  r  r  r  r  r   r   r   r#  collections.abcr   r   r   r   typingr   r   r	   r
   r   r   torch._Cr   torch._numpyrZ  r}  torch.utils._pytreerE  _pytreer  torch._dynamo.variables.baser   torch._dynamo.variables.listsr   torch._guardsr   r[   r   r   r   r   bytecode_transformationr   r   r   create_parameter_opr   r   r   r   guardsr   r   mutation_guardr   rc   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r  r.   r/   r0   r  r1   r2   	functionsr3   r4   user_definedr5   r6   r7   torch._dynamo.codegenr8   torch._dynamo.symbolic_convertr9   r;   rC   r   r   r  r4  r8  r<  rO  rU  r_  rb  	dataclassr  r{  r  r   ry   r  r  r!  r1  	lru_cacher   r   rL  rT  rV  r  r   r  r  r  r  r  r  r  r  finfoiinfor  ra  r  r  r  r?   r@   rA   <module>r>     s
   "                 				 



       . . . . . . . .       % % % % % % J J J J J J J J J J J J J J J J        $ $ $ $ $ $ $ $ $ 5 5 5 5 5 5 7 7 7 7 7 7             @ @ @ @ @ @ @ @ @ @ @ @         
 G F F F F F 9 9 9 9 9 9 9 9 0 0 0 0 0 0 0 0 5 5 5 5 5 5               
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
         
 ? > > > > > > > G G G G G G G G X X X X X X X X X X  E//////DDDDDD	 	 	 	 	 	 	 	X
 X
 X
 X
 X
O X
 X
 X
v
- - - - -? - - -(`; `; `; `; `; `; `; `;FV V V V V V V Vr    o   
 
 
 
 
o 
 
 
2?0 ?0 ?0 ?0 ?0 ?0 ?0 ?0D; ; ; ; ;? ; ; ;(# # # # # # # #
%c %hsCx6H % % % %` ` ` ` ` ` ` `F M M M M M M M MD- D- D- D- D-&? D- D- D-N2 2 2 2 26 2 2 2j( ( ( ( (_ ( ( (NO NO NO NO NOo NO NO NObx
 x
 x
 x
 x
O x
 x
 x
v       &)= )= )= )= )=? )= )= )=XW
 W
 W
 W
 W
_ W
 W
 W
t Q4 95;M MN     ( Q(4 2E4M MN ( ( (  (]
 ]
 ]
 ]
 ]
O ]
 ]
 ]
B? ? ? ? ?? ? ? ?*- - - - -o - - -9D 9D 9D 9D 9D? 9D 9D 9Dx    _   B B B B B B B BJ0 0 0 0 0o 0 0 0$$
 $
 $
 $
 $
O $
 $
 $
NS+ S+ S+ S+ S+? S+ S+ S+l# # # # #/ # # #( ( ( ( (- ( ( ( I#I#I! 
 
 
 
 
/ 
 
 
6P P P P P_ P P Pf2C 2C 2C 2C 2Co 2C 2C 2C 2C 2Cr@   